Redis 锁的超时

Discourse 使用了 DistributedMutex,这是一种针对多种场景的 Redis 锁实现。该 Redis 锁实现似乎包含超时机制,因此它更像是一种“租约”而非传统意义上的“锁”。

这可能会引发一些问题,例如:当 Redis 锁超时,但受该锁保护的工作尚未完成时,可能会出现竞态条件。

确实如此,但我们设计时会尽量让操作耗时远小于锁的超时时间。

如果完全没有任何超时机制,就可能出现互斥锁被永久占用的情况(例如:某个应用进程在持有锁时与 Redis 的连接中断)。