【问题标题】:At what point does a cache key get correctly generated在什么时候正确生成缓存键
【发布时间】:2013-09-20 23:36:14
【问题描述】:

根据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'

目前这只是一个错误吗?

【问题讨论】:

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


    【解决方案1】:

    有趣的问题。事实证明,您需要非常仔细地查看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',
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多