2010-12-14 39 views
2

而不是緩存整個站點或整個視圖,我決定只使用低級緩存API緩存幾個大量查詢。使用Django進行低級緩存

我在做這樣的事情

key = ... 
value = cache.get(key) 
if value is None: 
    value = ... 
    cache.set(key, value, CACHE_TIMEOUT) 

它的工作原理幾乎預期(問題01:有沒有更好的辦法做到這一點?),
但如果我設置CACHE_TIMEOUT到一個很大的值(86400:db每天更新一次),
看起來CACHE_TIMEOUT正在被其他東西所覆蓋,並且該值被緩存了幾分鐘...

問題02:)我做錯了什麼?
我的超時時間太長了嗎? 或者我正在緩存太多的信息? (value包含500-1000個對象,並以50-60個不同的頁面/鍵進行評估)

回答

1

某些緩存服務器(例如memcached)是有損的,而較新的項目會將較舊的項目從緩存中移出。監視緩存統計信息並適當修改您的配置和/或行爲。

+0

我試圖用memcached的。你覺得我應該嘗試別的東西嗎? – dolma33 2010-12-14 21:20:12

+0

我想您應該監控緩存統計看看有什麼需要改變 – 2010-12-14 21:26:59

+0

謝謝,我發現了這個問題......我正在使用低級別的API,而不禁用整個站點緩存(3箇中間件類),這是絕對正確的:緩存統計信息知道真相 – dolma33 2010-12-17 15:48:32

0

我不知道你正在使用的緩存後端也不怎麼你到底設置超時,但也許你做錯了(從django documentation on caching):

每個緩存後端可以接受參數。它們在 CACHE_BACKEND設置中以 查詢字符串樣式給出。有效參數 如下:

  • 超時:默認的超時時間,以秒爲單位使用的緩存。這 參數默認爲300秒(5
  • ...

CACHE_BACKEND = "memcached://127.0.0.1:11211/?timeout=60

+1

在'cache.set()'中傳遞的值覆蓋了這個值。 – 2010-12-14 20:49:08