我们在生产应用程序中使用couchbase服务器2.2.0。
在过去的几个月里,当我们对一个值执行ExecuteGet时,我们得到的是先前的值,而不是更新的值。
示例场景(所有操作都已同步): UserBalance_12345是500。
1. ExecuteSet("UserBalance_12345",1000)
2. ExecuteGet("UserBalance_12345"); -> The result is 500 instead of 1000.
这种情况很少发生,但仍然会发生并对我们造成伤害,因为人们说他们的余额不会立即更新。
这样的场景如何在couchbase中发生? 你有这个场景的解决方案吗?
答案 0 :(得分:0)
很久以前,我也已经解决了这个问题。有时它会返回错误的值。关于此,还有一些forum topics。但在我的情况下,数据并不那么重要,而且很少提出这个问题,所以我实际上并没有试图找出导致它的原因。这个问题与.net sdk有关,因为在带有js回调的nodejs sdk中,它永远不会发生在我身上。
但我有一些可能对你有帮助的想法。
1)尝试添加到您的ExecuteStore persist
参数:
PersistTo persistTo = PersistTo.One;
var result = _Client.ExecuteStore(StoreMode.Set, key, value, persistTo);
2)如果您将用户余额存储在单独的密钥中(就像问题一样)并且它的类型适合ulong,您可以尝试使用Increment
or ExecuteDecrement
函数而不是ExecuteStore。增量/减量函数通常比存储更好,并且它们是原子的。