Couchbase Get() 后跟 atomic Increment()

Couchbase Get() followed by atomic Increment()

我有一个程序可以执行以下操作:

  1. 使用 Get()

  2. 检查沙发底座中是否存在钥匙
  3. 如果它存在则不做任何事情,return 对调用应用程序是错误的。

  4. 如果密钥不存在,则将其值增加 1。

所以基本上,我使用 Increment 创建的密钥的值将始终为 1,实际上不会递增(我使用 Increment 只是为了使用原子性创建密钥)。

我的问题是,如果同时从 3 个请求调用 Get() 操作怎么办?

第一个请求是否会成功递增密钥,上面提到的第 2 点是否适用于其余 2 个请求?

是否所有 3 个请求都面向点号 1,然后将密钥递增 3 次..?

我正在使用 .NET SDK for couchbase。

只需使用插入而不是您当前使用的操作序列。对于单个键,插入是原子的,因此只有一个会话会成功,所有其他 concurrent/subsequent 插入都会失败。

var result = await bucket.InsertAsync("key", 1);

如果操作成功,则项目之前不存在并成功创建,值为 1。如果失败,错误代码为 KEY_EXISTS,则项目已经存在,可能值为 1如果没有其他改变的话。