【发布时间】:2015-07-14 08:45:58
【问题描述】:
我正在使用 StackExchange.Redis 包作为多线程应用程序的共享存储,该应用程序又将同时在多个服务器上运行......所以是多线程的;)
我拥有的一个最简单的用例是我想对一系列键(即 KEY1=4 KEY2=7、KEY3=13 等)保持基本计数。我将制定业务规则来强制执行给定键允许的最大允许值。因此,例如,假设 KEY1 只能达到 5...如果两个线程同时触发试图增加它,我只想让其中一个成功。
我相信我可以通过首先获取当前值然后以该值未更改为条件的事务来完成此操作。这会按我的预期工作吗?有没有更优雅的方法来做到这一点?
public void Increment(string key) {
IDatabase db = redisConn.GetDatabase();
var val = db.StringGet(key);
int maxVal = 5;
if (Convert.ToInt32(val) < maxVal) {
var trans = db.CreateTransaction();
trans.AddCondition(Condition.StringEqual(key, val));
trans.StringIncrementAsync(key);
trans.Execute();
}
}
PS:很喜欢这个包,合作很愉快
【问题讨论】:
标签: c# multithreading redis stackexchange.redis