在什么时候正确生成缓存键

时间:2013-09-20 23:36:14

标签: python django memcached django-cache django-caching

根据docs,它有效地表示在服务器之间共享缓存实例时应使用KEY_PREFIX。我的问题是什么时候KEY_PREFIX适用于什么时候?在这里使用MemcachedStats是基本的例子

from memcached_stats import MemcachedStats
from django.core.cache import get_cache

cache = get_cache('default')
assert len(cache._servers) == 1
mem = MemcachedStats(*cache._servers[0].split(":"))

# Now lets play verify no key
cache.get("TEST") == None
key = next((x for x in mem.keys() if "TEST" in x))

# Create a key
cache.set("TEST", "X", 30)
key = next((x for x in mem.keys() if "TEST" in x))

print key
':1:TEST'

此时它看起来没问题 - 我的意思是前缀设置了或者我认为......

from django.conf import settings
print settings.KEY_PREFIX
'beta'
print settings.SITE_ID
2
print settings.CACHE_MIDDLEWARE_KEY_PREFIX
'beta'

此时这只是一个错误吗?

1 个答案:

答案 0 :(得分:0)

有趣的问题。事实证明,您需要仔细查看documentation并注意KEY_PREFIX是CACHES [<cache>]中的子项。你需要像这样定义它。

CACHE_MIDDLEWARE_KEY_PREFIX  = 'staging'
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'production_cache_server:11211',
        'KEY_PREFIX': CACHE_MIDDLEWARE_KEY_PREFIX,
    }
}

这也是定义KEY_FUNCTION的方法。我确认这也行。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'production.jxycyn.cfg.usw1.cache.amazonaws.com:11211',
        'KEY_FUNCTION': 'apps.core.cache_utils.make_key',
    }
}