Удалить определенные элементы из кеша Django? - PullRequest
9 голосов
/ 06 апреля 2009

Я использую кэширование всего сайта с memcached в качестве бэкэнда. Я хотел бы сделать недействительными страницы в кэше, когда базовый объект базы данных изменяется.

Если имя страницы изменится, я лишу законной силы весь кеш (так как это влияет на навигацию на каждой странице. Неуклюжий, но достаточный для моих нужд.

Если меняется только содержимое страницы, я бы хотел сделать недействительным кеш только этой страницы.

Есть ли простой способ сделать это?

Ответы [ 2 ]

5 голосов
/ 06 апреля 2009

Я не слишком много кешировал с Джанго, но я думаю, что вы хотите здесь signals.

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

from django.core.signals import post_save
from django.core.cache import cache

def invalidate_cache(sender, **kwargs):
    # invalidate cache
    cache.delete(sender.get_absolute_url()) # or any other pertinent keys

post_save.connect(invalidate_cache, sender=UnderlyingModel)

Это должно правильно удалить элемент из кэша при его обновлении.

4 голосов
/ 03 января 2010

Решение tghw фактически не работает, потому что ключ кеша НЕ является абсолютным путем Ключ вычисляется из абсолютного пути и заголовков HTTP. См. этот вопрос для примера.

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