CAS actually stands for check-and-set, and is a method of optimistic locking. The CAS value is associated with each document which is updated whenever the document changes - a bit like a revision ID. The intent is that instead of pessimistically locking a document (and the associated lock overhead) you just read it's CAS value, and then only perform the write if the CAS matches.
The general use-case is:
- Read an existing document, and obtain it's current CAS (
get_with_cas
)
- Prepare a new value for that document, assuming no-one else has modified the document (and hence caused the CAS to change).
- Write the document using the
check_and_set
operation, providing the CAS value from (1).
Step 3 will only succeed (perform the write) if the document is unchanged between (1) and (3) - i.e. no other user has modified it in the meantime. Typically if (3) does fail you would retry the whole sequence (get_with_cas
, modify, check_and_set
).
There's a much more detailed description of check-and-set in the Couchbase Developer Guide under Concurrent Document Mutations.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…