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