2017-10-12 5 views
1

Supposons que je dispose d'une clé dans mon cache redis ou dans un autre cache et qu'il existe de nombreuses requêtes GET pour cette clé. La valeur de la clé dépend des données d'un modèle (table). Maintenant, si par le biais d'un processus la valeur associée à cette clé est mise à jour dans la base de données, comment puis-je invalider le cache.Invalider le cache lors de la mise à jour dans la table

Répondre

3

Vous pouvez utiliser Django signals pour écrire une fonction de récepteur pour écouter le signal post_save et purger le cache associé. Par exemple:

from django.db.models.signals import post_save 

@receiver(post_save, sender=Item) 
def my_handler(sender, instance, created, **kwargs): 
    r.delete('item/%d' % instance.pk) 

Une solution plus robuste serait d'utiliser un paquet comme django-cacheops.

+0

Salut @jacob Merci encore une chose une idée si le signal est généré presque en même temps quand une demande GET est appelée, alors lequel aura la priorité? –

+0

@UtkarshSrivastav Vos employés d'applications Web Django opèrent dans différents processus, donc ils ne devraient pas être en "concurrence" les uns avec les autres. L'opération Redis 'delete' devrait être effectivement instantanée. Cela ne devrait pas poser de problème, sauf si vous vous attaquez à un cas d'utilisation inhabituel. –