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 包裹),避免锁泄漏。

相关推荐
两锭子25 分钟前
Redis基础
redis
烟沙九洲34 分钟前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索39 分钟前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞1 小时前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路13 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog13 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog13 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
行百里er1 天前
5 分钟跑起 Redis(Docker 版)
redis·后端·docker
福大大架构师每日一题1 天前
redis 8.10.2发布:安全修复集中落地,事务 ACL、集群总线与模块稳定性全面加固
redis
Pioneer000011 天前
我用 Redis + 网关做多模型 API 路由:缓存命中率 95%+ 的工程实践
人工智能·redis·后端·缓存·性能优化·架构