在django項目中,我只需要緩存一些查詢,因爲服務器的限制,緩存表而不是memcached。在Django中緩存查詢
其中一個查詢看起來是這樣的:
比方說,我有一個Parent
對象,裏面有很多Child
對象。 我需要存儲簡單查詢parent.childs.all()
的結果。
我有沒有問題,一切正常,與一些代碼預期一樣
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
cache.set(key, parent.children.all(), CACHE_TIMEOUT)
value = cache.get(key)
但有時,只是有時,cache.set
什麼也不做,並且,執行cache.set
後,cache.get(key)
不斷返回None
。
經過一番測試後,我注意到cache.set
在parent.children.all().count()
的值較高時不起作用。
這意味着如果我在key
(例如)600個兒童物品的內部存儲,它工作正常,
但它不適用於1200名子女。
所以我的問題是:是否有一個密鑰可以存儲的數據的限制?我如何覆蓋它?
第二個問題:哪種方式是 「更好」,上面的代碼,或以下的?
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
value = parent.children.all()
cache.set(key, value, CACHE_TIMEOUT)
第二個版本不會導致錯誤cache.set
不起作用,所以它可能是一個解決方法,我的問題,但顯然不的解決方案。
一般來說,讓我們忘記我的問題,您認爲哪個版本「更好」?
關於更新的代碼:第二個版本更好。每一次設置或獲取的調用都涉及酸洗和base64編碼數據,所以最大限度地減少這些調用會帶來更好的性能。 – Seth 2011-01-11 21:24:36