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.

Reply via email to