Ответ 1
Вы можете использовать http://www.darkcoding.net/software/memcached-list-all-keys/, как описано в Как проверить содержимое Кэш Django с Python memcached?
Я пытаюсь понять, как Django устанавливает ключи для моих просмотров. Мне интересно, есть ли способ получить все сохраненные ключи от Memcached. что-то вроде cache.all()
или что-то в этом роде. Я пытаюсь найти ключ с помощью cache.has_key('test')
, но все же не могу определить, как называются ключи вида.
ОБНОВЛЕНИЕ: причина, по которой мне это нужно, - это то, что мне нужно вручную удалить части кеша, но не знаю значений ключей, которые Django устанавливает для моего ключа cache_view
Вы можете использовать http://www.darkcoding.net/software/memcached-list-all-keys/, как описано в Как проверить содержимое Кэш Django с Python memcached?
Вы можете использовать memcached_stats из: https://github.com/dlrust/python-memcached-stats. Этот пакет позволяет просматривать memcached-ключи из среды python.
Как уже упоминалось, нет способа получить список всех ключей кеша в django. Если вы используете внешний кеш (например, memcached или кеширование базы данных), вы можете напрямую проверить внешний кеш.
Но если вы хотите знать, как преобразовать ключ django в тот, который используется в бэкэнд-системе, функция django make_key() сделает это.
https://docs.djangoproject.com/en/1.8/topics/cache/#cache-key-transformation
>>> from django.core.cache import caches
>>> caches['default'].make_key('test-key')
u':1:test-key'
Если это не слишком устарело, у меня была похожая проблема, из-за которой мне пришлось перебирать весь кеш. Мне это удалось, когда я добавил что-то в свой кеш, как в следующем псевдокоде:
#create caches key list if not exists
if not my_cache.get("keys"):
my_cache.set("keys", [])
#add to my cache
my_cache.set(key, value)
#add key to keys
if key not in my_cache.get("keys"):
keys_list = my_cache.get("keys")
keys_list.append(key)
my_cache.set("keys", keys_list)
Для RedisCache вы можете получить все доступные ключи с.
from django.core.cache import cache
cache.keys('*')
Есть некоторые странные обходные пути, которые вы можете сделать, чтобы получить все ключи из командной строки, но нет способа сделать это с memcached внутри Django. См. этот поток.