Redis并发读取和更新

时间:2017-06-27 11:39:11

标签: c# .net redis

据说我有一个json序列化对象,其count属性存储为一个值。如果两个用户同时检索对象并在将计数保存回来时用+ 1更新计数,则计数值将被破坏。

使用Redis处理此方案的正确方法是什么?我正在使用.ex的Stackexchange客户端。

1 个答案:

答案 0 :(得分:2)

您需要交易以保证一致性。在redis中,可以使用multi命令完成。

使用Stackexchange,可以这样做(示例改编自他们的doc

IDatabase db = redis.GetDatabase();
// Using transaction will lock "mykey" entry, so that all operation on this key are consistent. 
// All other clients attempting to manipulate this key, will have to wait for the end of transaction.
var tran = db.CreateTransaction(); 
string json = tran.StringGet("mykey");
// here, you should deserialize json, increment count value and serialize it back to string
string updated = handle_value(json);
tran.StringSet("mykey");
tran.Execute();

请注意,序列化和反序列化json可能很昂贵,而使用hash可以获得一些性能。

编辑:修复示例和一些解释。