Files
Hui-s-notebook/Java-Interview/分布式/分布式锁.md
Lostecho c8f11d0488 update
2024-03-03 16:38:06 +08:00

1.1 KiB
Raw Blame History

  1. 为什么需要分布式锁

多线程多个线程竞争会导致系统出现问题,需要对资源实现互斥访问,分布式系统下的悲观锁

  1. 分布式锁需要具备的条件
  • 互斥
  • 高可用性
  • 可重入
  • 高性能
  • 非阻塞
  1. 分布式锁的实现方案
  • 基于 mysql 实行

  • 基于分布式协调服务 ZooKeeper 实现

基于临时顺序节点Watcher事件监听器

  • 基于分布式键值存储系统 Redis 实现

SETNXset if not existkey value EX 3 过期时间 3s

DEL key,建议使用 Lua 脚本来通过 key 对应 value唯一值判断

需要保证 key 值和过期时间为一个原子操作,否则无法释放

锁的续期使用 Redission 实现,提供了一个专门监控和续期锁的看门狗,如果未执行完就延长锁的过期时间 RLock lock = redission. get ("lock") lock. lock () lock. unlock ()

集群下分布式锁的可靠性

通过 RedLock 算法解决,让客户端向集群中多个独立的 Redis 依次申请枷锁,半数以上的实例加锁成功才是获得分布式锁