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

相关推荐
小北方城市网6 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
ohoy6 小时前
RedisTemplate 使用之Zset
java·开发语言·redis
冰冰菜的扣jio10 小时前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
阿里巴巴P8资深技术专家10 小时前
基于 Spring AI 和 Redis 向量库的智能对话系统实践
人工智能·redis·spring
oMcLin11 小时前
如何在 AlmaLinux 9 上配置并优化 Redis 集群,支持高并发的实时数据缓存与快速查询?
数据库·redis·缓存
洛阳纸贵11 小时前
Redis
数据库·redis·缓存
挺6的还13 小时前
13.持久化
redis
沙白猿13 小时前
Redis报错:A bean with that name has already been defined in class path resource
spring boot·redis·mybatis
IT 行者13 小时前
Spring Security 7 OAuth2 授权码分布式存储之Redis存储方案
redis·分布式·spring
花~盗14 小时前
redis笔记
redis