Получить список ключей кэша в Django

Я пытаюсь понять, как Django устанавливает ключи для моих просмотров. Мне интересно, есть ли способ получить все сохраненные ключи от Memcached. что-то вроде cache.all() или что-то в этом роде. Я пытаюсь найти ключ с помощью cache.has_key('test'), но все же не могу определить, как называются ключи вида.

ОБНОВЛЕНИЕ: причина, по которой мне это нужно, - это то, что мне нужно вручную удалить части кеша, но не знаю значений ключей, которые Django устанавливает для моего ключа cache_view

Ответы

Ответ 2

Вы можете использовать memcached_stats из: https://github.com/dlrust/python-memcached-stats. Этот пакет позволяет просматривать memcached-ключи из среды python.

Ответ 3

Как уже упоминалось, нет способа получить список всех ключей кеша в 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'

Ответ 4

Если это не слишком устарело, у меня была похожая проблема, из-за которой мне пришлось перебирать весь кеш. Мне это удалось, когда я добавил что-то в свой кеш, как в следующем псевдокоде:

#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)

Ответ 5

Для RedisCache вы можете получить все доступные ключи с.

from django.core.cache import cache

cache.keys('*')

Ответ 6

Есть некоторые странные обходные пути, которые вы можете сделать, чтобы получить все ключи из командной строки, но нет способа сделать это с memcached внутри Django. См. этот поток.