2
我成立了,我用這樣一個簡單的本地內存緩存:緩存隨機刪除項目
from django.core.cache import caches
def stats_service(db):
stats_cache = caches['stats']
if stats_cache.get(db) is None:
stats_cache.set(db, GlobalStatsService(db))
return stats_cache.get(db)
在服務器運行後,我調用該函數通過視圖,在命令行卷曲,初始化緩存。
的問題是,如果我叫了好幾次,有時它會找到該項目,並立即返回值,符合市場預期,有時候會找不到它,將重新計算值。密鑰(這裏是db
)是我期望它們的字符串。我無法理解爲什麼項目從緩存中刪除,顯然是隨機的,以及如何讓它們保留。
有趣的是,該行爲是一樣的,我使用全局變量,而不是Django的緩存框架時(我嘗試所有這些,除了memcached的,因爲1MB限制)。
我已沒有TIMEOUT
值(和明顯的全局變量版本要麼什麼都沒有):
CACHES = {
...
'stats': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'stats',
},
我的應用程序與Apache和mod_wsgi的,2個進程和4個線程運行。也許它是相關的。難道是不同的進程訪問它自己的緩存版本?
我在做什麼錯?
這Redis的樣子我需要什麼,謝謝。像Memcached一樣,但沒有內存限制。奇怪的是,Django文檔甚至沒有提到它。 – JulienD
@muraveill Redis不是內置的,它需要第三方後端。這就是爲什麼它沒有在文檔中提到。 – knbk
@knbk因此,沒有了Memcached,但它提到:https://docs.djangoproject.com/en/1.9/topics/cache/#memcached。 – JulienD