ExecuteGet不会从couchbase服务器返回更新的值

时间:2014-06-12 12:20:41

标签: memcached couchbase nosql

我们在生产应用程序中使用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中发生? 你有这个场景的解决方案吗?

1 个答案:

答案 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。增量/减量函数通常比存储更好,并且它们是原子的。