大家好我是程序员二叉。简介分布式锁是分布式系统中保证并发安全的核心技术Redis 分布式锁凭借高性能、易实现成为主流方案。本文详细讲解基础 SET NX EX 实现、锁超时释放与自动续约、Redisson 看门狗机制、主从架构锁失效问题、可重入锁原理覆盖面试高频考点与生产落地方案。欢迎点赞收藏关注。一、Redis 分布式锁基础实现原理SET NX EX1. 核心命令SET lock_key 唯一标识 NX EX 30NX仅key不存在时才加锁成功保证互斥性EX设置过期时间避免服务宕机导致死锁唯一标识防止锁被其他线程误删2. 执行流程多个线程同时执行加锁命令只有一个线程成功加锁成功执行业务逻辑释放锁必须通过Lua 脚本判断唯一标识再删除 key保证原子性3. 核心作用实现多节点之间的互斥访问防止并发问题。二、分布式锁超时释放问题1. 问题描述锁设置了固定过期时间例如 30 秒但业务执行时间超过 30 秒锁自动过期被释放其他线程可以抢占锁导致并发安全问题。2. 根本原因锁过期时间 业务执行时间。3. 解决方案锁自动续约续命在锁即将过期时如果业务未执行完自动延长锁时间。三、锁续约实现 Redisson 看门狗原理1. 手动续约缺点代码侵入性强、定时任务难维护、可靠性低。2. Redisson 看门狗WatchDog自动续约原理加锁默认超时时间30s启动后台定时线程看门狗每 10s检查一次若线程仍持有锁将锁超时时间重置为 30s业务执行完毕释放锁看门狗停止服务宕机看门狗消失锁自动过期无死锁风险3. 优点自动化、无侵入、高可靠是生产环境标准方案。四、主从架构下分布式锁失效问题1. 失效场景主线程加锁成功主节点未同步锁到从节点就宕机3.哨兵选举新主节点4.其他线程在新主节点加锁成功→ 出现两把锁并发安全失效2. 根本原因主从异步复制存在数据同步延迟间隙。3. 解决方案RedLock 红锁复杂、性能差、官方不推荐业务兼容最终一致性通用折中方案Zookeeper 分布式锁强一致性无主从失效问题五、Redisson 可重入锁原理1. 可重入锁定义同一个线程可多次获取同一把锁不会自己锁死自己。2. 实现原理数据结构Redis Hashkey锁名field线程唯一标识value重入次数加锁首次加锁hset 启动看门狗同一线程再次加锁计数 1解锁计数 -1计数为 0删除key关闭看门狗3. 保证原子性全部操作通过Lua 脚本执行确保原子性。六、总结基础分布式锁SET NX EX唯一值Lua 解锁实现互斥与防误删。锁超时问题业务执行时间过长导致锁提前释放必须使用自动续约。看门狗定时自动延长锁有效期解决锁超时释放问题。主从锁失效主从异步复制导致锁丢失无法完美规避可通过业务或组件兼容。可重入锁Hash 结构 重入计数 Lua 脚本实现同一线程重复加锁。
【Redis】 分布式锁核心原理与面试重点(Redisson看门狗+可重入+主从问题)
发布时间:2026/6/3 20:20:26
大家好我是程序员二叉。简介分布式锁是分布式系统中保证并发安全的核心技术Redis 分布式锁凭借高性能、易实现成为主流方案。本文详细讲解基础 SET NX EX 实现、锁超时释放与自动续约、Redisson 看门狗机制、主从架构锁失效问题、可重入锁原理覆盖面试高频考点与生产落地方案。欢迎点赞收藏关注。一、Redis 分布式锁基础实现原理SET NX EX1. 核心命令SET lock_key 唯一标识 NX EX 30NX仅key不存在时才加锁成功保证互斥性EX设置过期时间避免服务宕机导致死锁唯一标识防止锁被其他线程误删2. 执行流程多个线程同时执行加锁命令只有一个线程成功加锁成功执行业务逻辑释放锁必须通过Lua 脚本判断唯一标识再删除 key保证原子性3. 核心作用实现多节点之间的互斥访问防止并发问题。二、分布式锁超时释放问题1. 问题描述锁设置了固定过期时间例如 30 秒但业务执行时间超过 30 秒锁自动过期被释放其他线程可以抢占锁导致并发安全问题。2. 根本原因锁过期时间 业务执行时间。3. 解决方案锁自动续约续命在锁即将过期时如果业务未执行完自动延长锁时间。三、锁续约实现 Redisson 看门狗原理1. 手动续约缺点代码侵入性强、定时任务难维护、可靠性低。2. Redisson 看门狗WatchDog自动续约原理加锁默认超时时间30s启动后台定时线程看门狗每 10s检查一次若线程仍持有锁将锁超时时间重置为 30s业务执行完毕释放锁看门狗停止服务宕机看门狗消失锁自动过期无死锁风险3. 优点自动化、无侵入、高可靠是生产环境标准方案。四、主从架构下分布式锁失效问题1. 失效场景主线程加锁成功主节点未同步锁到从节点就宕机3.哨兵选举新主节点4.其他线程在新主节点加锁成功→ 出现两把锁并发安全失效2. 根本原因主从异步复制存在数据同步延迟间隙。3. 解决方案RedLock 红锁复杂、性能差、官方不推荐业务兼容最终一致性通用折中方案Zookeeper 分布式锁强一致性无主从失效问题五、Redisson 可重入锁原理1. 可重入锁定义同一个线程可多次获取同一把锁不会自己锁死自己。2. 实现原理数据结构Redis Hashkey锁名field线程唯一标识value重入次数加锁首次加锁hset 启动看门狗同一线程再次加锁计数 1解锁计数 -1计数为 0删除key关闭看门狗3. 保证原子性全部操作通过Lua 脚本执行确保原子性。六、总结基础分布式锁SET NX EX唯一值Lua 解锁实现互斥与防误删。锁超时问题业务执行时间过长导致锁提前释放必须使用自动续约。看门狗定时自动延长锁有效期解决锁超时释放问题。主从锁失效主从异步复制导致锁丢失无法完美规避可通过业务或组件兼容。可重入锁Hash 结构 重入计数 Lua 脚本实现同一线程重复加锁。