我有一个执行以下操作的程序:
使用Get()
如果它的存在然后什么都不做,则向调用的应用程序返回一个错误。
如果密钥不存在,则以值1递增。
所以基本上,使用Increment创建的键的值将始终为1,实际上不会递增(我使用Increment只是为了使用原子性创建键)。
我的问题是如果在同一时间从3个请求中调用Get()操作该怎么办?
第一个请求是否会成功递增密钥,并且上面提到的第2个点是否适用于剩余的2个请求..?
或
是否所有3个请求都面向点号1,然后将密钥递增3次..?
我正在使用.NET SDK for couchbase。
答案 0 :(得分:1)
只需使用insert而不是您当前正在使用的操作序列。就单个键而言,Insert是原子的,因此只有一个会话会成功,所有其他并发/后续插入都会失败。
var result = await bucket.InsertAsync("key", 1);
如果操作成功,则该项目之前不存在并且已成功创建值为1.如果失败并显示错误代码KEY_EXISTS,则该项目已存在,如果没有其他更改,则可能为值1它