实战都通用的 Watchdog 原理说明

一句话先给你结论

Redis Watchdog 是 Redisson 分布式锁的"自动续命机制",用于防止业务还没执行完,锁却过期被别人抢走。

它不是 Redis 内置功能,是 Redisson 客户端实现的


一、没有 Watchdog 会发生什么?

你用 Redis 锁时,通常这样:

SET order_lock user1 NX EX 30

含义:

user1 拿锁 30 秒

如果你的业务跑了 45 秒:

时间 发生什么
0s user1 拿锁
30s Redis 自动释放锁
31s user2 拿到锁
45s user1 还在执行业务

结果:

两个人同时改订单 ------ 数据直接炸了


二、Watchdog 是怎么解决这个问题的?

Redisson 不给锁设置固定过期时间,而是:

给锁一个"默认租期" + 后台线程自动续期

默认:

锁有效期 = 30 秒 每 10 秒自动续 30 秒


三、Watchdog 的工作机制

当你调用:

RLock lock = redisson.getLock("order_lock");

lock.lock(); // 没有指定过期时间

Redisson 在内部做了三件事:

1️⃣ 获取锁

SET order_lock uuid NX PX 30000

成功后,启动一个后台线程(Watchdog)


2️⃣ Watchdog 定时续期

每隔 10 秒执行 Lua 脚本:

if redis.call("get", "order_lock") == uuid then redis.call("pexpire", "order_lock", 30000) end

含义:

只要还是我持有锁,就帮我续命 30 秒


3️⃣ 业务完成,释放锁

lock.unlock();

Redisson:

  • 删除 Redis key

  • 停止 Watchdog 线程


四、为什么 Watchdog 不会"误续别人锁"?

因为:

锁里存的是 UUID

只有:

value == 当前客户端 uuid

才会续期。

别人抢到锁后:

  • value 已变

  • Watchdog 续期失败


五、Watchdog 解决的本质问题

它解决的是:

"分布式锁的持有时间 ≠ 业务执行时间"

它让锁变成:

跟着业务跑,而不是跟着 TTL 跑


六、你在面试中可以这样说

Redis 的 Watchdog 是 Redisson 实现的一种自动续期机制,通过后台定时任务 + Lua 脚本,只要客户端还持有锁,就不断延长锁的 TTL,防止长事务执行时锁提前过期导致并发安全问题。

这是架构师级标准答案


七、一个高级追问你也能接住

问:Watchdog 会不会导致死锁?

答:

不会。

如果进程挂了,Watchdog 线程也会消失,锁不会再续期,TTL 到期后自动释放。

相关推荐
喜欢的名字被抢了1 小时前
01-Redis 基础篇:从定位到 Key 管理
redis·教程
顶点多余1 小时前
9.20 知识点查漏补缺
linux·面试·职场和发展
Anastasiozzzz1 小时前
重新定义 Agent 基建:Redis 在现代 AI 与智能体系统中的工程实践
java·人工智能·redis·ai
溪语流沙2 小时前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue
努力努力再努力wz3 小时前
【Redis进阶系列】:从主从复制到 Sentinel,一文建立故障检测、Leader 选举与 Failover 的完整心智模型
数据库·redis·缓存
晚安日记wanna3 小时前
Vue2 的 defineProperty 差在哪四层追问筛掉九成候选人
前端·vue.js·面试
tiger8653 小时前
大语言模型面试和题解,梳理中国主流开源 LLM 系列的发展脉络、技术路线与工程取舍
人工智能·gpt·深度学习·算法·自然语言处理·面试·transformer
Wang's Blog3 小时前
Java 项目实战: 外卖平台-后台系统登录功能开发
java·服务器·redis
修炼室4 小时前
海柔创新面试经验贴【HR面试】
面试
怕浪猫4 小时前
拆解 Google《AI Agent Handbook》:企业级 Agent 的六层架构与产品矩阵
面试·github·agent