进程A和B都在Redis资源R上运行。
这些过程可以并行执行,我需要这两个过程在它们改变R的时候都确定R的值
因此,我将Redis事务与WATCH命令一起使用。文档中写道:"我们要求Redis只有在没有其他客户端修改任何WATCHed密钥的情况下才执行交易。否则根本不会输入交易。"
要在失败的情况下重试,建议的方法是循环Watch/Multi-exec循环,直到成功为止。然而,我担心A和B可能会无限期地开始循环(即:livelock)。
这有什么好担心的吗?更好的是,该怎么办?在重试时设置随机超时会解决问题吗?
无需担心,因为只有A或B的EXEC和更改R会成功(Redis[大多]是单线程的)。失败的将需要使用新的R值重试事务。