我试图在Django缓存中进行原子增加或创建操作。我使用memcache作为后端。 Memcache客户端的incr_async()
功能需要initial_value
参数。意思是:Django原子增加初始值
如果键不在缓存中,而您指定的 initial_value,该键的值将被设置为这个初始值,然后 递增。
不过,我不知道怎样才能做到这一点在Django,为cache.incr()
文档说:如果你试图递增或递减一个 不存在的缓存键
一个ValueError将提高。
我当然可以这样做:
cache.add(key,initial_value)
cache.incr(key)
但是,这不是原子弹,可能导致竞争条件。
有没有办法解决这个问题,这会保持操作的原子性?
看到这个非常类似的问题:http://stackoverflow.com/questions/7967477/django-memcache-code-review-compare-and -组。一个答案表明,memcache的python实现实际上并不支持具有初始回退的“incr”。根据该用户,您必须在两个单独的操作中添加,然后添加incr。你可能想检查一下它的有效性。 –