Redisson看门狗机制详解

核心定义:Redisson 看门狗(Watch Dog)是分布式锁的自动续期机制,用于解决锁过期后业务未执行完的问题,避免锁提前释放导致并发安全风险。

  1. 核心原理
  • 当获取分布式锁时(如 RLock.lock() 无参调用),默认锁过期时间为 30秒。

  • 若业务未执行完,看门狗会在锁过期前 1/3时间(约10秒)自动向 Redis 发送续期请求,将锁过期时间重置为30秒。

  • 业务执行完毕后,调用 unlock() 会释放锁并停止续期;若进程意外终止,看门狗停止工作,锁会在30秒后自动过期,避免死锁。

  1. 关键特性
  • 自动触发:无参 lock() 默认启用,无需手动配置续期逻辑。

  • 灵活配置:

  • 可通过 lock(leaseTime, TimeUnit) 指定锁过期时间,此时看门狗不生效(需手动续期)。

  • 可通过 Config.setLockWatchdogTimeout(毫秒) 全局修改默认30秒过期时间。

  • 高性能:基于 Redis 发布订阅机制实现,续期操作轻量,不占用过多资源。

  1. 适用场景
  • 业务执行时间不确定(如复杂计算、远程调用),无法提前预估锁过期时间。

  • 避免手动续期的繁琐逻辑,简化分布式锁使用流程。

  1. 底层实现流程

  2. 客户端获取锁成功后,启动后台定时任务(看门狗线程)。

  3. 定时任务每隔 lockWatchdogTimeout / 3 秒执行一次。

  4. 续期时通过 Lua 脚本原子性更新锁的过期时间(避免并发续期冲突)。

  5. 锁释放或进程终止时,定时任务自动停止。

  6. 注意事项

  • 若手动指定 leaseTime ,看门狗机制失效,需确保 leaseTime 大于业务最大执行时间。

  • 依赖 Redis 正常运行,若 Redis 集群故障,续期失败可能导致锁提前过期。

  • 需正确调用 unlock() 释放锁(建议用 try-finally 包裹),避免锁泄漏。

相关推荐
用户3074596982072 天前
Redis 延时队列详解
redis
烤代码的吐司君2 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
leeyi4 天前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent
云技纵横5 天前
一个 @Async 让循环依赖暴雷:Spring 代理的暗坑
redis
犯困蛋挞yy6 天前
用Claude快速解决Redis代码报错反复无解的问题
redis
用户31693538118312 天前
Java连接Redis
redis
小小工匠14 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
taocarts_bidfans14 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
炘爚14 天前
Linux——Redis
数据库·redis·缓存