Estoy intentando tener una operación de aumento o creación atómica en la memoria caché de Django. Estoy usando Memcache como back-end. La función incr_async()
del cliente Memcache toma el parámetro initial_value
. El significado es:Aumento atómico de Django con valor inicial
Si la clave no existe todavía en la memoria caché y se especifica un initial_value , el valor de la clave se establecerá en este valor inicial y luego se incrementa .
Sin embargo, no veo cómo puedo hacer esto en Django, como cache.incr()
documentación dice:
Un ValueError será elevado si se intenta incrementar o reducir de una clave de caché inexistente .
Por supuesto que podía hacer:
cache.add(key,initial_value)
cache.incr(key)
Pero eso no es atómico y puede conducir a condiciones de carrera.
¿Hay alguna forma de evitar esto, lo que preservaría la atomicidad de la operación?
Ver esta pregunta muy similar: http://stackoverflow.com/questions/7967477/django-memcache-code-review-compare-and -conjunto. Una respuesta sugiere que la implementación python de Memcache en realidad no admite 'incr' con un repliegue inicial. Debes 'agregar' y luego' incr' en dos operaciones separadas según ese usuario. Es posible que desee comprobar la validez de eso. –