redis 分布式锁疑惑,希望能够得到解答,谢谢
qinggeng2015 opened this issue · 2 comments
qinggeng2015 commented
文中提到:
RedLock 算法
2、跟上面类似,轮流尝试在每个 master 节点上创建锁,过期时间较短,一般就几十毫秒
这里有点疑惑,如果创建锁的过期时间较短,只有几十毫秒,那么这个锁很快就过期了,锁是如何保持的呢?
假设A客户端成功在5个master节点创建了锁,几十毫秒后,任务可能还没有执行完毕,这个锁就自动过期从而被其他客户端获取到了。
weiyueli commented
其实这里有两个概念:
- Lock Acquire Timeout: 这个timeout很短,意义是如果client不能在此时间内从当前master上获取lock,则放弃当前master。
- Lock Auto Release TTL。是个timeout比较长,接近完成task本身所需要的时间。如果在处理task时client死掉了,lock会根据此TTL会自行解放 ,从而不会产生deadlock。
yklove commented
其实这里有两个概念:
- Lock Acquire Timeout: 这个timeout很短,意义是如果client不能在此时间内从当前master上获取lock,则放弃当前master。
- Lock Auto Release TTL。是个timeout比较长,接近完成task本身所需要的时间。如果在处理task时client死掉了,lock会根据此TTL会自行解放 ,从而不会产生deadlock。
这个解释比较清晰,文中提到过期时间较短,一般就几十毫秒,容易误解为TTL时间较短。
感谢。