Redis有一个decr if功能

时间:2014-11-06 08:09:12

标签: multithreading redis

在我的业务应用程序中,我计划在Redis缓存服务器中存储用户余额,允许多个进程使用余额。但是当金额下降到0时,我希望流程“失败”消耗平衡。

截至目前,我无法做到这一点。例如,假设余额为1 INR或$,并且2个线程中的每一个都想要使用它。每个线程确实得到和decr。因此,有时会发生该值低于0的情况,因为没有像“DECR IF”这样的原子操作类似于“比较和设置”。

是否有可能以任何其他方式实现这一目标?

1 个答案:

答案 0 :(得分:1)

虽然Redis中没有一个命令可以执行此操作,但您可以将transactionsWATCH命令用于此目的。使用check-and-set 子部分的乐观锁定中的以下伪代码基本上是您问题的答案:

WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC