2012-06-28 1 views
3

Я использую django's Memcached и механизм кэширования для просмотра с помощью декоратора @cache_page(timeout).Явное очищение flash/cache() или django memcached или удаление определенного ключа для каждого вида кэша

Внутри определенной функции просмотра Я хочу очистить весь кеш. Я пробовал cache.clear() и cache._cache.flush_all(), но, похоже, не скрывает кеш.

Есть ли другой способ сделать это, или я делаю это неправильно?

EDIT: Я понимаю, что полностью очистка кеша - не такая хорошая идея, как просто удаление необходимых ключей. Тем не менее, я не знаю ключей для просмотров, которые я украсил с помощью @cache_page (timeout). Как мне узнать их? И после того, как я приобрел ключ, я просто делаю cache.delete (key)?

Спасибо!

+0

В действительности нет веской причины, чтобы очистить * весь кеш. Просто удалите ключи, которые хотите обновить, и не смешивайте их с остальной частью. –

+0

Я не знаю ключей для просмотров, которые я украсил с помощью @cache_page (тайм-аут) Как мне их узнать? И после того, как я приобрел ключ, я просто делаю cache.delete (key)? – keithxm23

+0

Проверьте этот связанный вопрос SO: http://stackoverflow.com/questions/2268417/expire-a-view-cache-in-django –

ответ

1

Существует лучший способ, чем очистка всего кеша. См cache versioning:

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

Django обеспечивает лучший способ настроить индивидуальные значения кеша. Структура кэш-памяти Django имеет общесистемный идентификатор версии, , указанный с использованием настройки кеша VERSION. Значение этого параметра автоматически объединяется с префиксом кеша и предоставленным пользователем ключом для получения финального ключа кеша.