Django memcache Cache总是想念



我在Windows系统上运行了一个Memcached服务,并且我配置了Dev设置以具有以下缓存设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'TIMEOUT': 3600,
        'OPTIONS': {
            'MAX_ENTRIES': 100
        }
    }
}

我使用以下代码设置并从缓存中获取内容:

from django.core.cache import cache
def get_element(fsid):
    element = cache.get(str(fsid))  # get element from memcache if present
    if element is None:
        info("cache miss for fsid-"+str(fsid))
        fs = FlowStatusModel.objects.get(pk=fsid)
        pickle_path = fs.pickle
        gcs_pickle_path = fs.gcs_pickle
        try:
            info("reading from local disk")
            with open(pickle_path, 'rb') as handle:
                element = pickle.load(handle)
        except:
            info("local disk failed. copying file from cloud storage bucket to local disk")
            create_and_copy(gcs_pickle_path, pickle_path)
            with open(gcs_pickle_path, 'rb') as handle:
                element = pickle.load(handle)
        info("adding fsid-"+str(fsid) + " to cache with 1hour timeout")
        cache.set(str(fsid), element, 3600)
    return element

我在日志中看到,总是有一个缓存错过。我无法弄清楚Django是否能够在缓存中设置元素。如果我使用简单的setget尝试从python manage.py shell尝试,我可以将数据恢复。我尝试从命令prompgt运行命令memcached.exe -vv,以查看其是否接收请求,但在两种情况下(来自Dev Server/Manage.py Shell),我看到了任何集合或在控制台上打印的信息。感谢您在找出问题时的任何帮助。

可能是因为:

    'OPTIONS': {
        'MAX_ENTRIES': 100
    }

那是很少的数字。您可能会遭受大量的打击。每次您在缓存中添加一些东西时,很可能会替换其他内容。这可能就是您的fsid密钥的发生。

您也可能会犯规,以犯规的最大项目大小。通过更改备用配置文件(memcached.conf)并添加以下

来解决该问题
MAXITEMSIZE=12m

但是,应该注意的是,如果您存储如此大的物体,则可能对您不理想。

相关内容

  • 没有找到相关文章

最新更新