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

Gee*_*Jan 5 concurrency livelock redis

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

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

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

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

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

Ita*_*ber 5

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