2012-08-13 1 views
0

En utilisant Django et Memcached, j'ai une série de caches que je voudrais invalider. Je les ai tous sauvegardés dans des numéros de version uniques afin que je puisse les invalider. Cependant, en suivant les instructions du site Django, j'obtiens un ValueError.Invalider le cache basé sur la version en utilisant memcached

Mes numéros de version ressemblent à quelque chose comme: 20991791. Donc entiers, en général. Comment invalider toutes les clés memcache dans la version 20991791?

Comment invalider toutes les clés memcache dans la version 20991791?

Juste pour référence, réglage comme suit:

>>> cache.set('laugh',2,version=3) 

En ne connaissant que le numéro de version « 3 » Je dois être supprimer toutes les clés dans le numéro de version trois. Je pensais que incr_version l'avait fait, mais quand j'essaye, ça donne un valueerror.

>>> cache.incr_version(3) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/opt/virtual-envs/govini-web/lib/python2.6/site-packages/django/core/cache/backends/base.py", line 214, in incr_version 
    raise ValueError("Key '%s' not found" % key) 
ValueError: Key '3' not found 
+0

vous pouvez supprimer une version spécifique avec [ 'cache.delete ('rire', version = 3)'] (https://github.com/django/django/blob/master/django/core/cache/backends/memcached.py#L68). 'cache.incr_version ('rit')' va automatiquement augmenter la version, ne pas invalider les versions précédentes - afaik. Notez également qu'il s'agit d'une clé et non d'un numéro de version transmis en tant que paramètre –

Répondre

0

Il n'existe aucun bon moyen de le faire. Il y a une de solution possible dans memcached FAQ.

vous pouvez également utiliser backend de cache avec l'aide de modèles, django-redis par exemple, et supprimer avec motif "{KEY_PREFIX}:{VERSION}:*"

Questions connexes