2012-01-04 2 views
1

У меня проблема с memcached. Я храню значения, используя строковый ключ с шаблоном «question_% d_% d». Я от чего прийти память:memcached: элемент недоступен в кеше

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: Джанго параметры кэша:

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 
+0

Как можно с этим справиться, не видя код для набора кеша и получить? –

+0

@ Даниэль Роземан, я обновил сообщение – dbf

ответ

0

После некоторого исследования я видел основную причину проблемы. я имел конфиг кэша для Django 1.2 в моем settings.py (я использую Django 1.2):

CACHE_BACKEND = 'memcached://127.0.0.1:11211/' 

Когда я решил изменить тайм-аут, я от копирования вставленного настройки времени ожидания от новых документов Django для Django 1.3. Таким образом, эти параметры таймаута были просто проигнорированы, и использовался таймаут по умолчанию (5 мин).

Смежные вопросы