Zdravím. Je to trochu filozofická otázka, spíš jsem ji tak zkusil sepsat, i s pokusem o odpověď, abych si sám věci ujasnil. Jestli někdo má trpělivost si to přečíst a má k tomu nějaký postřeh, samozřejmě vítám.
Šéf mi dal toto zadání [zdravím, šéfe]: Produkty z různých skladů - chceme v redisu mít jejich celkový počet na všech skladech (ten pak vypisujeme v eshopu na obrazovku, kde je vždy několik produktů). Neznalý zacházení s redisem jsem to udělal tak, že jsem pro každý produkt udělal jeden klíč, něco jako stock_<product_id>. Šéf pak řekl "ne-ne-né", my chceme mít jediný klíč a v něm dictionary {product_id: stock}. Tak to teď předělávám. Ale vylíhlo se mi tu plno otázek: a) Mám-li u produktu nějakou funkci Product.get_stock() tak sice můžu v ní volat cache.get(), u mého řešení 1produkt=1klíč to ani nebyl problém, ale tady tu celou velkou dict budu na stránce, kde je 20 produktů, z cache tahat 20x? b) Tak bych si ji měl asi někam uložit. Ale kam? Třeba bych si uměl představit, navěsit ji na request, jenže u metod modelu se asi k requestu nedostano snadno. c) Nakonec by ani nebylo špatné mít to úplně trvalé, jako atribut nějakého globálního objektu. Jenže - je v Djangu něco takového? (napadá mě jedině: Product._meta) Jenže stejně by zas byl problém, že se z toho stane taková další level cache a bude potřeba to nějak synchronizovat se změnami stavu. Zkusím si nějak odpovědět: Když něco řeším u produktu, nemůžu vědět, jestli to bude potřeba v rámci requestu nebo jinak (management command). Takže řešit obecně nějaké uložení na nějakou dobu je problém. Můžu leda tak zavést parametr stock=None, který když bude None, načte se cache.get() během té funkce. A tam, kde mám pocit, že by se opakovaná volání vyplatilo optimalizovat, můžu to načíst předem (např. na začátku view) a předávat už hotové tím parametrem. -- -- E-mailová skupina django-cs@googlegroups.com Správa: http://groups.google.cz/group/django-cs --- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscr...@googlegroups.com. Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/752008eb-cd75-4a2c-935a-20705ff8be0fn%40googlegroups.com.