使用Watch,两个进程可能会更改相同的Redis资源。我应该担心活锁吗?

时间:2014-10-09 13:16:02

标签: concurrency redis livelock

进程A和B都在Redis资源R上运行。

这些过程可以并行执行,我需要两个过程在它们改变时确定R的值。

因此我使用Redis transactionsWATCH command。从文档:"我们要求Redis仅在没有其他客户端修改任何WATCHed密钥时才执行事务。否则,根本不会输入交易。"

要在失败的情况下重试,建议的方法是循环Watch / Multi-exec循环,直到成功为止。但是,我担心A和B都可能无限期地开始循环(即:livelock)。

这有什么值得担心的吗?更好的是,怎么办呢?在重试时设置随机超时会解决问题吗?

1 个答案:

答案 0 :(得分:4)

无需担心,因为只有A或B才能通过EXEC成功并更改R(Redis [大部分]是单线程的)。失败的那个将需要使用新的R值重试该事务。