Как обновить 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
  
Вернуться на верх