У меня проблема с memcached. Я храню значения, используя строковый ключ с шаблоном 'question_% d_% d'. У меня достаточно памяти:
STAT bytes 13307757
STAT limit_maxbytes 134217728
но вот журнал моего приложения:
2012-01-03 16:40:42,896 Get question for key question_4_1045: cache miss
2012-01-03 18:03:10,270 Get question for key question_4_1045: cache miss
2012-01-03 22:26:16,454 Get question for key question_4_1045: cache miss
2012-01-04 02:01:54,639 Get question for key question_4_1045: cache miss
2012-01-04 02:45:03,647 Get question for key question_4_1045: cache miss
2012-01-04 02:46:55,880 Get question for key question_4_1045: cache hit
2012-01-04 02:51:55,606 Get question for key question_4_1045: cache miss
так что мы можем видеть, что два последовательных вызова с одним и тем же ключом приводят к двум ошибкам кэша, и только один раз значение извлекается из кэша.
Почему memcached удаляет мои данные из кеша, даже если места достаточно? Можно ли это исправить?
Я попытался проверить мой файл журнала memcached (в соответствии с файлом конфигурации это /var/log/memcached.log), но он пуст.
Спасибо!
UPD:
Настройки кеша Django:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'TIMEOUT': 259200,
}
}
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
геттер:
from django.core.cache import cache
def get_question(level, random_num):
key = 'question_' + unicode(level) + '_' + unicode(random_num)
question = cache.get(key)
if question is None:
question = Question.objects.filter(level=level).order_by('id')[random_num]
cache.set(key, question)
log_message('Get question for key %s: cache miss' % key)
else:
log_message('Get question for key %s: cache hit' % key)
return question