Как обновить redis - Django
Мне нужна помощь в обновлении кэша. Я использую redis в своем проекте django.
Есть ли способ запустить автоматическое обновление самого redis, чтобы он выполнил поиск в базе данных для обновления кэша. Я пытаюсь реализовать это, избегая сигналов и задач.
Есть ли способ вызвать автообновление для определенного ключа в кэше redis?
Обнуление кэша - сложная проблема. Не существует одного хорошего способа, который бы решал их все. Насколько я знаю, Redis не способен триггерить функции Python, Redis - это просто механизм кэширования, хранящий пары ключ-значение с ttl. Если вам нужна некоторая автоматизация с аннулированием кэша, возможно, вам пригодится django-cacheops. django-cacheops на github
лично я пишу свои собственные аннулирующие/обновляющие устройства кэша. Поэтому, когда значение, которое вы кэшируете, обновляется, я обновляю его в кэше. Когда кэш достигает своего ttl, метод geter устанавливает его снова.
это делается в сигналах, например, когда кто-то меняет настройки модели с помощью admin_timeout:
@receiver(post_save, sender=Settings)
def invalidate_cache_settings(sender, instance, created, **kwargs):
if instance.name == 'ADMIN_TIMEOUT':
cache.set('admin_timeout', instance.value_int, 3600)
then in custom tag
@register.simple_tag(name="admin_timeout")
def get_admin_timeout():
admin_timeout = cache.get('admin_timeout', None)
if admin_timeout is None:
try:
admin_timeout = Settings.objects.get(name='ADMIN_TIMEOUT').value_int
except ObjectDoesNotExist:
admin_timeout = '36000'
cache.set('admin_timeout', admin_timeout, 3600)
return admin_timeout