502 字
3 分钟
Redisson 看门狗(watch dog)机制了解吗?
  1. 1Redis 系列导读:知识地图、必会主线与复习顺序
  2. 2Redis 中常见的数据类型有哪些?
  3. 3Redis 通常应用于哪些场景?
  4. 4Redis为什么这么快?
  5. 5Redis 常用的过期时间、删除 Key 命令有哪些?
  6. 6Redis 的过期 Key 是如何被删除的?
  7. 7Redis 内存满了怎么办?有哪些淘汰策略?
  8. 8缓存穿透、击穿、雪崩的区别与解决方案
  9. 9Redis 如何保证缓存与数据库的数据一致性?
  10. 10Redis 的持久化机制有哪些?
  11. 11Redis 主从复制的完整流程是什么?
  12. 12Redis 的哨兵机制是什么?
  13. 13Redis Cluster 模式与 Sentinel 模式的区别是什么?
  14. 14Redis 支持事务吗?如何实现?
  15. 15Redis 中如何实现分布式锁?
  16. 16Redis 的 Lua 脚本功能是什么?如何使用?
  17. 17如何解决 Redis 中的热点 Key 问题?
  18. 18Redis BigKey 有什么危害?如何发现和治理?
  19. 19为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  20. 20Redis 的 LRU 和 LFU 有什么区别?
  21. 21Redis 数据类型和底层编码有什么区别?
  22. 22Redis 中跳表的实现原理是什么?
  23. 23Redis 的 ZSet 为什么使用跳表,而不是平衡树?
  24. 24Redis 的 RDB 快照如何生成?为什么会有写时复制?
  25. 25Redis 的 AOF 刷盘和重写有什么区别?
  26. 26Redis 断线后如何通过 PSYNC 部分重同步?
  27. 27Redis 主从切换为什么会丢数据?WAIT 能解决吗?
  28. 28Redis 集群会出现脑裂问题吗?
  29. 29Redisson 看门狗(watch dog)机制了解吗?本文
  30. 30Redis Cluster:哈希槽、Gossip 与故障转移
  31. 31Redis Pipeline 为什么能提高吞吐?能保证原子性吗?
  32. 32Redis 的 SCAN 和 KEYS 有什么区别?
  33. 33Redis 变慢时如何排查?SLOWLOG 能看到所有耗时吗?
  34. 34Redis 和 MySQL 有什么区别?
  35. 35Redis 为什么使用 SDS,而不是 C 字符串?
  36. 36Redis 的哈希表如何处理冲突和渐进式 rehash?
  37. 37Redis Cluster 的 MOVED 和 ASK 重定向有什么区别?
  38. 38Redis Cluster 为什么会报 CROSSSLOT?Hash Tag 怎么用?
  39. 39Redis 如何实现限流?固定窗口和滑动窗口怎么选?
  40. 40Redis Stream 如何保证消息消费?ACK 和 PEL 是什么?
  41. 41Redis 删除数据后为什么内存不下降?如何理解内存碎片?

1. 为什么需要看门狗?#

Redis 分布式锁通常通过设置过期时间,避免客户端异常退出后锁一直不释放。

例如,线程 A 获取锁时设置了 30 秒过期时间:

SET lock value NX EX 30

但是,锁的过期时间不一定等于业务的执行时间。

假设业务需要执行 50 秒:

  1. 第 0 秒:线程 A 获取锁,锁的有效期为 30 秒。
  2. 第 30 秒:锁过期,Redis 自动删除锁。
  3. 第 30 秒之后:线程 A 仍在执行业务,线程 B 却可以获取同一把锁。
  4. 结果:线程 A 和线程 B 可能同时执行业务,导致数据不一致。

核心矛盾#

  • 锁的过期时间设置太短:业务没执行完,锁就过期了。
  • 锁的过期时间设置太长:客户端异常退出后,其他线程可能要等待很久才能获取锁。

因此,需要一种机制:业务没执行完时自动延长锁的有效期,业务结束后释放锁,客户端宕机后锁也能最终自动过期。

2. 什么是看门狗?#

Redisson 看门狗机制是 Redisson 分布式锁提供的一种自动续期机制,主要是为了解决业务执行时间超过锁的过期时间,导致锁提前释放的问题。

默认情况下,锁的看门狗超时时间是 30 秒。当我们使用 lock() 获取锁且没有指定租约时间时,Redisson 会在后台定期检查锁的持有情况,并将锁的过期时间续期为 30 秒。

当业务执行完毕并调用 unlock() 后,看门狗就会停止续期并释放锁。如果客户端宕机,无法继续续期,锁最终会因为 TTL 到期而自动释放,从而避免死锁。

需要注意的是,如果获取锁时显式指定了 leaseTime,就会使用指定的租约时间,不再依赖看门狗自动续期。

Redisson 看门狗(watch dog)机制了解吗?
https://blog.xqcherry.top/posts/interview/redis/redisson-watchdog/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0