天天看点

python aerospike client 实现CAS更新操作

有需求是对aerospike的数据先取出来,修改后再写入aerospike,这个时候就需要实现aerospike的CAS(Compare and Set/Swap)操作。Google以后发现利用Generation policy可以实现。

先记录读取数据时返回的

meta

信息,然后

put()

的时候比较当时的meta信息与读数据时的是否一致,一致时才写入,否则会报错。

代码:

bin_name = ['bin1', 'bin2']
(key, meta, bins) = client.select(key, bin_name)
# processing bins
process_bins(bins)

policy = {
    "exists": aerospike.POLICY_EXISTS_UPDATE,
    "gen": aerospike.POLICY_GEN_EQ
}
meta = {"gen": meta['gen']}
client.put(key, bins, meta=meta, policy=policy)