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