使用 Redis 的互斥

Mutual Exclusion using Redis

read about Redis being used for mutual exclusion. Docs说下面的话:

谁能解释一下这个简单的实现在什么情况下无法实现互斥。

对于所有试图做一些关键工作的实例,执行以下(伪代码):

while ( set keyForMutex anyValue nx == nil )
{
    sleep ( 200 ms )
}

Finish up the critical task.

del keyForMutex

这不会在实现互斥方面失败,但如果您的代码在删除密钥之前就死了,它可能会过度成功并提供无限排他性排除。

一个可能的解决方案是在大量超时后使密钥过期以允许关键任务结束。