分布式锁
1、为什么使用分布式锁
- 集群或者分布式环境下,就需要分布式锁,否则锁无效 2、分布式锁的种类
- 通过中间件实现,比如mysql、redis、zk、etcd等 3、redis怎么做分布式锁
- 使用setnx、expireAt命令 4、只使用命令存在业务机器宕机风险
- 加锁和释放锁的命令通过脚本完成,保证他们原子性的 5、业务处理时间很长导致锁超时
- 使用开启看门狗线程进行适当的锁续期,业务需要多锁使用的时长有一个预估 6、redis服务器存在单点故障
- 一般redis是集群部署 7、redis主从或数据看主从在分布式锁中存在的问题
- 数据同步延时导致重复加锁 8、主从的解决方案
- 使用计数加锁,多台机器,加锁成功的机器过半以上才算加锁成功 9、计数加锁成功后,加锁成功的机器下线,随后扩容空白机器,导致计数加锁不能失效
- 下线后延时扩容机器 10、jvm的stw导致锁续期失败
- mysql乐观锁 + zk