我设置了一个简单的本地内存缓存,我使用如下:
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)
服务器运行后,我通过视图调用此函数,并在命令行中使用curl来初始化缓存。
问题是,如果我多次调用它,有时它会找到该项并立即返回值,如预期的那样,有时会找不到它并重新计算该值。键(这里是db
)是我期望它们的字符串。我无法理解为什么从缓存中删除项目,显然是随机的,以及如何使它们停留。
有趣的是,当我使用全局变量而不是Django的缓存框架时,行为是相同的(除了memcached,我尝试了所有这些因为1MB的限制)。
我没有设置TIMEOUT
值(显然全局变量版本也没有):
CACHES = {
...
'stats': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'stats',
},
我的应用程序使用Apache和mod_wsgi,2个进程和4个线程运行。也许它是相关的。是不是一个不同的进程访问自己的缓存版本?
我做错了什么?
答案 0 :(得分:3)
是的,这正是发生的事情。本地内存缓存正是:进程的本地内存。
它不适合在生产中使用,绝对不适合在多工艺环境中使用。使用适当的缓存后端;例如,Redis可以非常简单地启动和运行。