/ / Augmentation atomique de Django avec valeur initiale - python, django, count, memcached, atomic

Augmentation atomique de Django avec valeur initiale - python, django, count, memcached, atomic

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 № 1

Pour 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