1

我正在尝试在我的应用程序中处理一些 couchbase 异常。upsert 方法可以抛出一个TemporaryFailureException指示服务器端的临时故障。是否存在文档的 CAS 值会被更新的情况?如果发生此异常,我将使用指数退避重试固定次数。如果 CAS 值已更新,那么在下次重试时,我需要确保下一次传递更新后的 CAS 值,否则我将收到 CASMismatchException。

那么是否可以保证在服务器端出现故障时不会更新 CAS 值?

4

1 回答 1

0

CAS 代表文档的“版本”,当您需要乐观锁定时使用它(两个应用程序试图同时更改同一个文档)。

当服务器有更复杂的问题(磁盘故障、内存不足等)时,会抛出 TemporaryFailureException。如果您的集群配置正确,您的服务器将自动进行故障转移,另一个节点将取代它。因此,使用某种 backOff 机制重试操作以等待服务器升级是一种有效的策略。

值得强调的是,如果您同时需要阅读文档,可以调用方法“readFromReplica”。Couchbase SDK 内部也有一个断路器。

于 2020-04-28T20:56:53.277 回答