6

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

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

因此,我将Redis 事务WATCH 命令一起使用。来自文档:“我们要求 Redis 仅在没有其他客户端修改任何 WATCHed 键时才执行事务。否则根本不输入事务。”

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

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

4

1 回答 1

5

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

于 2014-10-09T14:04:57.680 回答