看哪,下面我简单的Python的memcached代码:如何将项目原子添加到memcached的列表(在Python)
import memcache
memcache_client = memcache.Client(['127.0.0.1:11211'], debug=True)
key = "myList"
obj = ["A", "B", "C"]
memcache_client.set(key, obj)
现在,假设我想一个元素“d”附加到缓存为myList
列表,我怎样才能做到原子性?
我知道这是错误的,因为它不是原子:
memcache_client.set(key, memcache_client.get(key) + ["D"])
上面的语句包含的竞争条件。如果另一个线程在恰当的时刻执行这个相同的指令,其中一个更新会被破坏。
我该如何解决这种竞争条件?我如何更新以原子方式存储在memcached中的列表或字典?
https://code.google.com/p/memcached/wiki/NewCommands – user3159253 2014-12-14 10:11:46
很有可能这就是答案,你应该使用'CAS()'(检查和设置),而不是简单'set()' – user3159253 2014-12-14 10:12:33
你正在使用哪个python memcache库? – Anentropic 2014-12-19 05:37:10