Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency 两个进程可以使用Watch更改相同的Redis资源。我应该为livelock担心吗?_Concurrency_Redis_Livelock - Fatal编程技术网

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

Concurrency 两个进程可以使用Watch更改相同的Redis资源。我应该为livelock担心吗?,concurrency,redis,livelock,Concurrency,Redis,Livelock,进程A和进程B都在Redis资源R上运行 这些过程可以并行执行,我需要两个过程在它们改变R时确定R的值 因此,我使用的是。文档中写道:“我们要求Redis仅在没有其他客户修改任何关注的密钥时执行交易。否则,根本不会输入交易。” 若要在失败时重试,建议的方法是循环Watch/Multi-exec循环,直到成功。但是,我担心A和B可能会无限期地开始循环(即:livelock) 这有什么好担心的吗?更好的是,该怎么办?在重试时设置一个随机超时可以解决问题吗?无需担心,因为只有a或B的EXEC和chan

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

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

因此,我使用的是。文档中写道:“我们要求Redis仅在没有其他客户修改任何关注的密钥时执行交易。否则,根本不会输入交易。”

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


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

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

但是存在饥饿的可能性,对吗?是的,这种乐观锁定模式存在饥饿的可能性。