Удалить определенные предметы из кеша Django?

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

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

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

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

2 ответа

Решение

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

Я не слишком много кешировал с Джанго, но думаю, что вы хотите здесь 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)

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

Другие вопросы по тегам