Я пытаюсь выполнить атомарную операцию увеличения или создания в кеше Django. Я использую кэш памяти как бэкэнд. Функция клиента Memcache incr_async ()
принимает параметр initial_value
.Значение таково:
Если ключ еще не существует в кэше и вы указываете initial_value, значение ключа будет установлено на это начальное значение, а затем будет увеличиваться.
Однако я не понимаю, как это сделать в Django, поскольку документация cache.incr ()
говорит:
Ошибка ValueError будет вызвана, если вы попытаетесь увеличить или уменьшить { {1}} несуществующий ключ кеша.
Конечно, я мог бы сделать:
cache.add(key,initial_value)
cache.incr(key)
Но это не атомарно и может привести к условиям гонки.
Есть ли способ обойти это, чтобы сохранить атомарность операции?