有需求是对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)