2015-03-10 2 views
1

В старой версии Couchbase Java SDK было несколько check-and-set (CAS) methods для реализации оптимизированной блокировки . Но что такое соответствующий API в более новой версии SDK (> = 2.0)?Check-and-set в Couchbase Java SDK 2.x?

Начальный код:

JsonDocument doc = bucket.get("myKey"); 
Long casValue = doc.cas(); 
// some method to set new value for "myKey" only if CAS value 
// has not been changed 

ответ

3

Как вы уже видели, значение CAS встраивается в документе. Большинство методов API будут учитывать это, если CAS не равен 0, например replace(Document) будет выдавать CASMismatchException, если данный документ имеет другое значение CAS, чем то, что находится на сервере.

+0

Это отвечает на мой вопрос, и я уже принял его, но, возможно, вы также знаете, как создать новый документ с конкретным CAS (вместо изменения существующего документа на месте)? – ffriend

+1

При создании документа, например. используя 'JsonDocument.create' есть перегрузка, которая позволяет вам установить cas –

+0

@ SimonBaslé Я никогда не могу поймать исключение CASMismatchException. Когда есть два потока, которые пытаются изменить документ одновременно (значение роли будет одинаковым для обоих документов при чтении документа), а один поток изменяет документ и заменяет его на сервере, что, в свою очередь, изменяет значение cas , После этого, когда второй поток, который также изменяет документ, пытается заменить, значение cas просто перераспределяется, а не бросает исключение CASMismatchException. Есть ли способ поймать это исключение? –

Смежные вопросы