В какой момент ключ кеша генерируется правильно

В соответствии с документами это фактически говорит о том, что вы должны использовать 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 ответ

Решение

Интересная проблема. Оказывается, вам нужно очень внимательно изучить документацию и заметить, что 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',
    }
}
Другие вопросы по тегам