LINUX.ORG.RU

django + memcached


0

1

Что-то я с этим кэширвоание в джанге совсем никак не могу подружиться. Кэш протухает за несколько минут. Вот настройки из settings:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'TIMEOUT': 86400,
    }
}
Кэширую не шаблоны, а отдельные объекты, вот так:
from django.core.cache import cache
...
cache.set(hash, value, 43200)

Открываю один раз страничку - кэш сформирован, открываю ещё раз через минуту - берётся из кэша, открываю минут через пять - всё, кэша уже нет. Мемкэшеду выдаю 64 мегабайта, из которых бывает занято от силы несколько килобайт. Джанга работает через nginx --> apache, если это важно. Чё за фигня?

★★

Офтоп: джангу кошернее пускать через nginx+uWSGI.

Кстати, у самого мемкеша быстрое протухание в настройках не прописано?

jessey
()
Ответ на: комментарий от jessey

Офтоп: джангу кошернее пускать через nginx+uWSGI.

Исторически сложилось. Как только захлебнётся и придётся ставить отдельно вебсервер, то он будет, неверное, nginx+uWSGI.

у самого мемкеша быстрое протухание в настройках не прописано

У самого мемкэша, на сколько мне известно, никакого таймаута нет. Только настройка, убивать ли данные при переполнении памяти, но переполнения не происходит. Разве что я как-то не так смотрю:
echo «stats» | nc 127.0.0.1 11211 | grep bytes
STAT bytes_read 426
STAT bytes_written 15375
STAT limit_maxbytes 67108864
STAT bytes 0

SOmni ★★
() автор топика
Ответ на: комментарий от SOmni

А ты уверен что кеш не инвалидируется какой-то внутренней механикой? Никакие токены не передаешь? Сессия не регенерируется?

jessey
()
Ответ на: комментарий от jessey

Да он как бы не должен зависеть от сессий. Т.е. один пользователь на одном компьютере открыл - положили в кэш; другой пользователь на другом компьютере открыл - взяли из кэша.

SOmni ★★
() автор топика

поди кешируется огромное количество объектов? попробуй такое в настройки добавить:

'OPTIONS': { 'MAX_ENTRIES': <тут число побольше> }

chicane
()
Ответ на: комментарий от SOmni

А может и нет. Поставил 50000 (примерно прикинул, что должно хватить с запасом), всё равно сбрасывается быстро. Позже попробую проанализировать сколько точно запросов и выставить соответственно.

SOmni ★★
() автор топика
Ответ на: комментарий от SOmni

И кстати, я вообще не понимаю, как такое может быть:
STAT bytes_read 426

426 байт у меня может прочитаться разве что за одно открытие странички, эта цифра должна бы исчисляться мегабайтами.

SOmni ★★
() автор топика
Ответ на: комментарий от xpahos

Поставил. Всегда показывает 0 calls. Пробовал кэшировать вьюхи (@cache_page(60)), пробовал весь сайт целиком - всё равно 0. Количество прочитанных байт в
echo «stats» | nc 127.0.0.1 11211 | grep bytes
увеличивается каждый раз на 6 байт; учитывая предполагаемые объёмы кэширования, это невероятно мало. Да и вообще, цифра эта, видимо, увеличивается исключительно когда я делаю собственно stats, т.е. джанга ничего из мемкэша не читает. Но в settings всё прописано по мануалам, cache.get() возвращает что надо (но недолго). Цифра в bytes_written похожа на правду.

Я в ступоре.

SOmni ★★
() автор топика
Ответ на: комментарий от SOmni

Впрочем, для SQL эта панель тоже показывает 0 queries, что тоже неправда.

SOmni ★★
() автор топика
Ответ на: комментарий от SOmni

Всё же кэш вообще, видимо, не работает, потому что:
STAT cmd_get 0
STAT cmd_set 0
Пробовал использовать pylibmc вместо memcache - та же история. Куда же тогда пишет джанга?

SOmni ★★
() автор топика

Всё, вопрос снимается. Оказывается, у меня была такая древняя джанга, что для неё даже конфигурация кэшей прописывалась иначе. Впрочем, оно и после прописывания не заработало. Обновился до 1.4, всё отлично теперь. Всем спасибо.

SOmni ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.