Джанго / общий кеширующий вопрос - PullRequest
1 голос
/ 17 сентября 2011

Один из распространенных шаблонов при кэшировании с Django - это использование идентификатора текущего сайта в каждом ключе кэша, чтобы, по сути, пространство имен ваших ключей.У меня проблема в том, что я хотел бы иметь возможность удалять все значения в кеше в пространстве имен (например, удалить все значения кеша для сайта 45, потому что они внесли некоторые фундаментальные изменения).Текущий шаблон для работы с этими сигналами повсеместно и т. Д. Я использовал пример ключа кэша Site.id, потому что это общий шаблон, который могут распознавать другие, но то, как я использую кэш для настраиваемого мультиприложение-арендатор делает эту проблему еще более глубокой, поэтому мой вопрос: есть ли кэш-память и / или шаблон, который хорошо работает для удаления объектов в пространстве имен или в псевдо-пространстве имен, что не является чрезвычайно дорогим (т.е.не перебирая все возможные ключи кеша для заданного пространства имен, удаляя кеш для каждого)?Я бы предпочел использовать memecached, но я открыт для любого решения, которое работает хорошо, подключаемый модуль или нет.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011

Обычно сложно удалить большие категории ключей.Лучше всего, чтобы с каждым сайтом был связан номер поколения.Начните генерацию с 1. Используйте номер генерации в ключах кэша для этого сайта.Когда вы вносите фундаментальное изменение или в любое другое время, когда хотите сделать недействительным весь кэш для сайта, увеличьте номер поколения сайта.Теперь все обращения к кешу будут пропущены, пока все не будет кешировано заново.Все старые данные по-прежнему будут в кеше, но с возрастом они будут отбрасываться, и к ним больше не будет доступа.

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

1 голос
/ 18 сентября 2011

У меня такое чувство, что поддержка Django Cache Versioning , новая в Django 1.3.

Позволяет установить общесистемную переменную VERSION в вашем кеше, или вы можете явно установить ее при создании записи:

cache.set("mykey", True, version=2)

С помощью этого метода, когда вам нужно обновить кеш, просто увеличьте ваш VERSION и вы в чистоте.

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