文章目录一、 核心工作原理1. 触发条件2. 默认参数3. 续期过程二、 如果客户端宕机了怎么办三、 源码层面的实现逻辑四、 优缺点分析优点缺点与风险总结在分布式锁的实现中Redisson 的看门狗Watchdog机制是为了解决一个经典难题“如何给锁设置一个完美的过期时间”如果过期时间太短业务没执行完锁就释放了会导致并发安全问题如果过期时间太长甚至不设过期时间万一客户端宕机了锁就会一直留在 Redis 里形成死锁。一、 核心工作原理看门狗的核心逻辑可以概括为自动续期防止提前失效。1. 触发条件并不是所有的 Redisson 锁都会启动看门狗。启动只有当你加锁时没有显式指定leaseTime或者设为 -1时看门狗才会启动。不启动如果你写的是lock.lock(10, TimeUnit.SECONDS)Redisson 会认为你很清楚业务耗时到期即删不再续期。2. 默认参数默认生存时间lockWatchdogTimeout默认为30 秒。续期频率每隔lockWatchdogTimeout / 3的时间即10 秒检查一次。3. 续期过程当锁成功获取后Redisson 会在后台启动一个定时任务基于 Netty 的HashedWheelTimer时间轮每隔 10 秒看门狗会检查主线程是否还持有这把锁。如果线程依然存活且未主动释放锁它会向 Redis 发送一段Lua 脚本。该脚本负责将该 Key 的过期时间重新重置为 30 秒。二、 如果客户端宕机了怎么办这正是看门狗机制的高明之处自动释放如果持有锁的 Java 进程突然崩溃或断电看门狗这个后台线程自然也就随之消失了。死锁预防此时没有人再给 Redis 里的 Key 续期那么最多过了 30 秒默认值Redis 就会自动删除这个 Key其他等待的线程就能重新竞争锁。三、 源码层面的实现逻辑在 Redisson 的tryLockInnerAsync方法中加锁成功后会调用scheduleExpirationRenewal// 伪代码逻辑privatevoidrenewExpiration(){// 1. 创建一个延时任务Timeouttasktimer.newTimeout(timeout-{// 2. 异步执行续期 Lua 脚本CompletionStageBooleanfuturerenewExpirationAsync(threadId);future.whenComplete((res,e)-{if(res){// 3. 如果续期成功递归调用自身实现循环续期renewExpiration();}});},internalLockLeaseTime/3,TimeUnit.MILLISECONDS);}四、 优缺点分析优点业务解耦开发者不需要预估业务执行时间避免了因 GC 抖动或网络延迟导致的锁提前失效。安全防死锁结合了 Redis 的 TTL 机制和存活检查。缺点与风险性能开销虽然 Lua 脚本很轻量但大量长耗时任务会导致频繁的续期网络请求。依然存在“异步复制”问题看门狗解决了单机 Redis 上的锁过期问题但如果 Redis 是主从架构Master 宕机且锁未同步到 Slave依然可能发生锁丢失这需要配合Redlock算法或使用ZooKeeper来解决。总结看门狗就像是一个**“心跳监测器”**。它在不阻塞主业务逻辑的前提下确保了只要你的程序还在运行锁就永远不会过期而一旦你的程序“断气”了锁也能在短时间内自动归还。在你的微服务项目中如果涉及到长时间的任务处理比如复杂的报表生成或跨系统的 AIGC 内容处理看门狗是保证分布式锁可靠性的必备工具。关于 Redisson 的锁你是否还关注过它的公平锁或者**红锁Redlock**的具体应用场景