【问题标题】:Couchbase Get() followed by atomic Increment()Couchbase Get() 后跟原子 Increment()
【发布时间】:2016-05-17 17:45:02
【问题描述】:

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

  1. 使用 Get() 检查密钥是否存在于 couchbase 中

  2. 如果它存在则不做任何事情,向调用应用程序返回 false。

  3. 如果键不存在,则将其值递增 1。

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

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

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

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

我正在使用 .NET SDK for couchbase。

【问题讨论】:

    标签: c# .net couchbase couchbase-view


    【解决方案1】:

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

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

    如果操作成功,则该项目之前不存在并且使用值 1 成功创建。如果它失败并返回错误代码 KEY_EXISTS,则该项目已经存在,如果没有其他任何更改,则可能具有值 1。

    【讨论】:

    • 有效!!非常感谢您的帮助.. !非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多