Couchbase Get()后跟原子增量()

时间:2016-05-17 17:45:03

标签: c# .net couchbase couchbase-view

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

  1. 使用Get()

  2. 检查密钥是否存在于couchbase中
  3. 如果它的存在然后什么都不做,则向调用的应用程序返回一个错误。

  4. 如果密钥不存在,则以值1递增。

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

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

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

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

    我正在使用.NET SDK for couchbase。

1 个答案:

答案 0 :(得分:1)

只需使用insert而不是您当前正在使用的操作序列。就单个键而言,Insert是原子的,因此只有一个会话会成功,所有其他并发/后续插入都会失败。

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

如果操作成功,则该项目之前不存在并且已成功创建值为1.如果失败并显示错误代码KEY_EXISTS,则该项目已存在,如果没有其他更改,则可能为值1它