分布式锁


基于Redis

方式 介绍 原理、机制、步骤 失效情况 缺点
Set NX PX 基本操作 命令:
set key value NX PX 毫秒数 仅在redis单机模式下有效
集群模式下,会失效
lua脚本 进阶操作 仅在redis单机模式下有效
哨兵/集群模式下,会失效
原因是因为会有主从异步,异步传播的问题
可能主节点刚写入,还未同步到从节点,主节点就宕机了,此时其他线程也可能加锁成功 哨兵/集群模式下,会失效
RedLock 分布式加锁思想 1、用相同的key 和随机的value进行加锁
2、设置较短的过期时间
3、使用时需要计算各个机器上加锁的耗时
4、半数以上成功,且超时时间未到,才算加上成功
5、否则,认为加锁失败,逐个进行解锁缩放
Redission 分布式锁框架中间件
大量使用lua脚本 加锁过程
先用exits判断是否已经加锁成功
可重入锁:若成功,则使用使用hincby,加锁次数+1
使用pexpire:设置过期时间
自动延长锁过期时间(watchdog机制)(本质是定时任务)

基于Zookeeper

参考:
1、https://blog.51cto.com/zhangxueliang/6315986


文章作者: 王利康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王利康 !