Атомарное увеличение Django с начальным значением

Я пытаюсь выполнить атомарную операцию увеличения или создания в кеше Django. Я использую кэш памяти как бэкэнд. Функция клиента Memcache incr_async () принимает параметр initial_value .Значение таково:

Если ключ еще не существует в кэше и вы указываете initial_value, значение ключа будет установлено на это начальное значение, а затем будет увеличиваться.

Однако я не понимаю, как это сделать в Django, поскольку документация cache.incr () говорит:

Ошибка ValueError будет вызвана, если вы попытаетесь увеличить или уменьшить { {1}} несуществующий ключ кеша.

Конечно, я мог бы сделать:

cache.add(key,initial_value)
cache.incr(key)

Но это не атомарно и может привести к условиям гонки.

Есть ли способ обойти это, чтобы сохранить атомарность операции?

5
задан vartec 18 November 2011 в 16:30
поделиться