Couchbase上的写操作接受参数cas
(创建和设置)。此外,任何非数据提取查询的返回结果对象都包含cas
属性。我用Google搜索了一下,找不到一篇关于它的好概念性文章。
有人能告诉我何时使用 CAS 以及如何操作?使用 CAS 的常见工作流程应该是什么?
我的猜测是我们需要为第一次写入操作获取 CAS ,然后将其与下一次写入一起传递。我们还需要使用结果的 CAS 更新它。如果我错了,请纠正我。
答案 0 :(得分:39)
CAS实际上代表 check-and-set ,是一种乐观锁定的方法。 CAS值与每个文档相关联,每当文档发生更改时都会更新 - 有点像修订ID。目的是不是悲观地锁定文档(以及相关的锁定开销),而是只读取它的CAS值,然后仅在CAS匹配时执行写入。
一般用例是:
get_with_cas
)check_and_set
操作编写文档,提供(1)中的CAS值。如果文档在(1)和(3)之间不变,则步骤3将仅成功(执行写入) - 即,其他用户在此期间没有对其进行修改。通常,如果(3)失败,您将重试整个序列(get_with_cas
,修改,check_and_set
)。
在Concurrent Document Mutations下的Couchbase开发人员指南中有更详细的检查和设置说明。