doocs/advanced-java

redis 分布式锁疑惑,希望能够得到解答,谢谢

qinggeng2015 opened this issue · 2 comments

文中提到:

RedLock 算法
2、跟上面类似,轮流尝试在每个 master 节点上创建锁,过期时间较短,一般就几十毫秒

https://github.com/doocs/advanced-java/blame/master/docs/distributed-system/distributed-lock-redis-vs-zookeeper.md#L51

这里有点疑惑,如果创建锁的过期时间较短,只有几十毫秒,那么这个锁很快就过期了,锁是如何保持的呢?
假设A客户端成功在5个master节点创建了锁,几十毫秒后,任务可能还没有执行完毕,这个锁就自动过期从而被其他客户端获取到了。

其实这里有两个概念:

  1. Lock Acquire Timeout: 这个timeout很短,意义是如果client不能在此时间内从当前master上获取lock,则放弃当前master。
  2. Lock Auto Release TTL。是个timeout比较长,接近完成task本身所需要的时间。如果在处理task时client死掉了,lock会根据此TTL会自行解放 ,从而不会产生deadlock。

其实这里有两个概念:

  1. Lock Acquire Timeout: 这个timeout很短,意义是如果client不能在此时间内从当前master上获取lock,则放弃当前master。
  2. Lock Auto Release TTL。是个timeout比较长,接近完成task本身所需要的时间。如果在处理task时client死掉了,lock会根据此TTL会自行解放 ,从而不会产生deadlock。

这个解释比较清晰,文中提到过期时间较短,一般就几十毫秒,容易误解为TTL时间较短。
感谢。