核心定义:Redisson 看门狗(Watch Dog)是分布式锁的自动续期机制,用于解决锁过期后业务未执行完的问题,避免锁提前释放导致并发安全风险。
- 核心原理
-
当获取分布式锁时(如 RLock.lock() 无参调用),默认锁过期时间为 30秒。
-
若业务未执行完,看门狗会在锁过期前 1/3时间(约10秒)自动向 Redis 发送续期请求,将锁过期时间重置为30秒。
-
业务执行完毕后,调用 unlock() 会释放锁并停止续期;若进程意外终止,看门狗停止工作,锁会在30秒后自动过期,避免死锁。
- 关键特性
-
自动触发:无参 lock() 默认启用,无需手动配置续期逻辑。
-
灵活配置:
-
可通过 lock(leaseTime, TimeUnit) 指定锁过期时间,此时看门狗不生效(需手动续期)。
-
可通过 Config.setLockWatchdogTimeout(毫秒) 全局修改默认30秒过期时间。
-
高性能:基于 Redis 发布订阅机制实现,续期操作轻量,不占用过多资源。
- 适用场景
-
业务执行时间不确定(如复杂计算、远程调用),无法提前预估锁过期时间。
-
避免手动续期的繁琐逻辑,简化分布式锁使用流程。
-
底层实现流程
-
客户端获取锁成功后,启动后台定时任务(看门狗线程)。
-
定时任务每隔 lockWatchdogTimeout / 3 秒执行一次。
-
续期时通过 Lua 脚本原子性更新锁的过期时间(避免并发续期冲突)。
-
锁释放或进程终止时,定时任务自动停止。
-
注意事项
-
若手动指定 leaseTime ,看门狗机制失效,需确保 leaseTime 大于业务最大执行时间。
-
依赖 Redis 正常运行,若 Redis 集群故障,续期失败可能导致锁提前过期。
-
需正确调用 unlock() 释放锁(建议用 try-finally 包裹),避免锁泄漏。