Django-cachebot является приложение Django, который обеспечивает автоматизированную кэширование и недействительными.
Установка
& NBSP; 1. easy_install Django-cachebot или пункт установить Django-cachebot
& NBSP; 2.
& NBSP; Добавить cachebot ваших INSTALLED_APPS
& NBSP; 3.
& NBSP; Установить бэкэнды к одному из обработчиков в cachebots.backends, например:
& NBSP; CACHE_BACKEND = 'cachebot.backends.memcached: //127.0.0.1: 11211 / таймаут = 0'
Текущие поддерживаемые бэкэнды:
cachebot.backends.dummy
cachebot.backends.memcached
cachebot.backends.pylibmcd
Cachebot обезьяна патчи по умолчанию Django менеджер и QuerySet сделать CacheBotManager и CachedQuerySet значения по умолчанию, используемые вашего проекта Django.
Использование
Предположим, у вас есть запрос, который выглядел, как это и вы хотите, чтобы кэшировать его:
Photo.objects.filter (пользователь = пользователь, статус = 2)
Просто добавьте .cache () в QuerySet цепи, как так:
Photo.objects.cache (). Фильтровать (пользователь = пользователь, статус = 2)
Этот запрос будет получить недействительным, если любой из следующих условий:
1. Одним из объектов, возвращенных запросом изменяется.
2. Пользователь изменяется.
3. Фото изменен и имеет статус = 2.
4. Фото изменен и имеет пользовательский = пользователю.
Это аннулирования критерии, вероятно, слишком осторожны, потому что мы не хотим, чтобы аннулировать этот кэш каждый раз, когда фотография со статусом = 2 будет сохранен. Для тонкой настройки критериев аннулирования, мы можем указать только на определенных недействительными полей. Например:
Photo.objects.cache ("пользователь"). Фильтровать (пользователь = пользователь, статус = 2)
Этот запрос будет получить недействительным, если любой из следующих условий:
1. Одним из объектов, возвращенных запросом изменяется.
2. Пользователь изменяется.
3. Фото изменен и имеет пользовательский = пользователю.
Django-cachebot также может обрабатывать select_related, вперед отношения, и обратного отношения, то есть:
Photo.objects.select_related (). Кэш ("пользователь"). Фильтровать (user__username = "Дэвид", статус = 2)
Photo.objects.cache ("пользователь"). Фильтр (user__username = "Давид", статус = 2)
Photo.objects.cache ('message__sender'). Фильтровать (message__sender = пользователь, статус = 2)
Настройки
CACHEBOT_CACHE_GET по умолчанию: Ложь
если CACHEBOT_CACHE_GET = True, все objects.get запросы будут автоматически кэшируются. Это может быть отменено на уровне менеджера как так:
класса Фото (models.Model):
& NBSP; ...
& NBSP; объекты = models.Manager (cache_get = True)
CACHEBOT_CACHE_ALL по умолчанию: Ложь
если CACHEBOT_CACHE_ALL = True, все запросы будут автоматически кэшируются. Это может быть отменено на уровне менеджера как так:
класса Фото (models.Model):
& NBSP; ...
& NBSP; объекты = models.Manager (cache_all = True)
CACHE_PREFIX по умолчанию: ''
Предположим, у вас есть развитие и промышленный сервер обмена и тот же Memcached сервер. Обычно это плохая идея, потому что каждый сервер может быть перезаписи ключей кэша другого сервера. Если вы добавляете CACHE_PREFIX с настройками, все ключи кэш будет иметь этот префикс добавляется к ним так что вы можете избежать этой проблемы.
Предостережения (Важно!)
& NBSP; 1. Django-cachebot требует Django 1.2 или более
& NBSP; 2. Добавление / Удаление объектов с ManyRelatedManager не будет автоматически недействительным. Это потому, что сигналы для этих типов операций не не в Django до 1,2. До тех пор, пока вы должны будете вручную недействительными эти запросы так:
& NBSP; от cachebot.signals импортировать invalidate_object
& NBSP; user.friends.add (друг)
& NBSP; invalidate_object (пользователь)
& NBSP; invalidate_object (друг)
& NBSP; 3. рассчитывать () запросы не будут кэшироваться.
& NBSP; 4. Если вы недействительными на поле, которое находится в диапазоне или исключить запрос, эти запросы будут получать недействительными, если что-либо в изменении таблицы. Например, следующее будет получить недействительными, если что-нибудь на стол пользователя изменилась:
& NBSP;. Photo.objects.cache ("пользователь") фильтр (user__in = пользователей, статус = 2)
& NBSP;. Photo.objects.cache ("пользователь") исключить (пользователь = пользователь, статус = 2)
& NBSP; 5. Вы, вероятно, следует использовать такой инструмент, как Django-Memcache-статус, чтобы проверить состояние вашего кэша. Если Memcache переполняет и начинает падать ключи, вполне возможно, что ваши запросы не могут получить недействительным.
& NBSP; 6. .values_list () еще не кэшировать. Вы должны сделать что-то вроде этого, вместо этого:
& NBSP; [. фото ['ID'] для фото в Photo.objects.cache ("пользователь") фильтр (пользователь = пользователь) .values ('ID')]
& NBSP; 7. Вполне возможно, что есть крайние случаи я пропустил. Django-cachebot еще в его младенчестве, так что вы должны еще дважды проверьте, что ваши запросы кэшируются и получать недействительными. . Пожалуйста, дайте мне знать, если вы заметили какие-либо странные расхождения
Требования
- Python
- Джанго
Комментарии не найдены