Почему кеш Django работает с locmem, но не работает с memcached? - PullRequest
4 голосов
/ 09 июля 2009

Использование кеша Django с locmem (с простыми классами Python в качестве значений, хранящихся в списках / кортежах / картах) работает отлично, но не работает с memcached.

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

При получении они не возвращают значения и удаляются из кэша.

Принудительное значение «hi» делает доступными те, которые появляются в кеше, но не учитывает, почему большинство ключей просто не существует.

Вопросы:

  1. Почему только некоторые ключи попадают в memcached, а другие - нет, даже если все значения установлены в "hi"?
  2. Есть ли способ активировать ведение журналов или отчетов об ошибках? (кажется, что все молча проваливается)
  3. Почему классы Python корректно сериализуются в locmem, но не попадают в Memcached?

Ответы [ 2 ]

3 голосов
/ 09 июля 2009

Видимо, ключи не могут содержать пробелов:

http://code.djangoproject.com/ticket/6447
http://blog.pos.thum.us/2009/05/22/memcached-keys-cant-have-spaces-in-them/

Как только я использовал ключ с пробелом, все стало непредсказуемым.

3 голосов
/ 09 июля 2009

Чтобы узнать, что происходит, запустите memcached -vv 2>/tmp/mc_debug_log (я предполагаю, что вы работаете в какой-то системе Unixy) и запустите его на короткое время - вы найдете подробную информацию в этом журнале, когда вы закончите.

В зависимости от того, какой интерфейс Python для memcached вы используете, может быть, что в качестве значений поддерживаются только строки (как в модуле StringClient в cmemcache ), или что все выбираемые объекты (с накладными расходами) конечно же, как в более общем модуле Client в том же cmemcache, GAE memcache и python-memcached ; если вы можете использовать только строки в качестве значений, возможно, вы используете интерфейс первого типа?

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