缓存随机删除项目

时间:2016-03-24 12:21:20

标签: python django caching

我设置了一个简单的本地内存缓存,我使用如下:

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个线程运行。也许它是相关的。是不是一个不同的进程访问自己的缓存版本?

我做错了什么?

1 个答案:

答案 0 :(得分:3)

是的,这正是发生的事情。本地内存缓存正是:进程的本地内存。

它不适合在生产中使用,绝对不适合在多工艺环境中使用。使用适当的缓存后端;例如,Redis可以非常简单地启动和运行。