Sto provando ad avere un'operazione di incremento o creazione atomica nella cache di Django. Sto usando memcache come backend. La funzione incr_async()
del client Memcache richiede il parametro initial_value
. Il significato è:Aumento atomico di Django con valore iniziale
Se la chiave non esiste ancora nella cache e si specifica un valore_iniziale, il valore della chiave verrà impostato su questo valore iniziale e poi incrementato.
Tuttavia, non vedo come posso fare questo in Django, come cache.incr()
documentazione dice:
Un ValueError verrà generato se si tenta di incrementare o decrementare una chiave di cache inesistente .
Naturalmente ho potuto fare:
cache.add(key,initial_value)
cache.incr(key)
Ma non è atomico e può portare a condizioni di gara.
C'è un modo per aggirare questo, che preserverebbe l'atomicità dell'operazione?
Vai a questa domanda molto simile: http://stackoverflow.com/questions/7967477/django-memcache-code-review-compare-and -impostato. Una risposta suggerisce che l'implementazione python di memcache non supporta effettivamente 'incr' con un fallback iniziale. Devi 'aggiungere' e poi' incr' in due operazioni separate secondo quell'utente. Potresti voler verificare la validità di ciò. –