分布式锁

1、为什么使用分布式锁

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