Couchbase Get() 后跟 atomic Increment()
Couchbase Get() followed by atomic Increment()
我有一个程序可以执行以下操作:
使用 Get()
检查沙发底座中是否存在钥匙
如果它存在则不做任何事情,return 对调用应用程序是错误的。
如果密钥不存在,则将其值增加 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如果没有其他改变的话。
我有一个程序可以执行以下操作:
使用 Get()
检查沙发底座中是否存在钥匙
如果它存在则不做任何事情,return 对调用应用程序是错误的。
如果密钥不存在,则将其值增加 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如果没有其他改变的话。