J'essaie d'avoir une opération d'augmentation ou de création atomique dans le cache Django. J'utilise Memcache comme back-end. Memcache client "s incr_async()
fonction prend initial_value
paramètre. La signification est:
Si la clé n’existe pas encore dans le cache et que vous spécifiez une initial_value, la valeur de la clé sera définie sur cette valeur initiale et puis incrémenté.
Cependant, je ne vois pas comment puis-je faire cela à Django, comme cache.incr()
la documentation dit:
Une ValueError sera levée si vous essayez d’incrémenter ou de décrémenter une clé de cache inexistante.
Bien sûr que je pourrais faire:
cache.add(key,initial_value)
cache.incr(key)
Mais ce n'est pas atomique et peut conduire à des conditions de concurrence.
Y a-t-il un moyen de contourner cela, qui préserverait l'atomicité de l'opération?
Réponses:
2 pour la réponse № 1Pour autant que je sache, l’API de cache de Django ne le supporte pas. Vous devez descendre à l’API memcache et le faire directement:
from django.core.cache import cache
client = cache._client # <--direct reference to memcached.Client object