memcached: элемент недоступен в кеше - PullRequest
1 голос
/ 04 января 2012

У меня проблема с 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

1 Ответ

0 голосов
/ 04 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...