Redis 分布式锁自动续期机制

Redis 分布式锁一般是有自动续期机制的,不需要开发者手动续期。

典型代表就是 Redisson 的 WatchDog(看门狗)机制

我分两种情况说清楚。


一、自己用 SETNX + EXPIRE 实现的锁

例如:

复制代码
SET lock_key uuid NX PX 30000

这里设置了 30 秒过期时间

特点:

  • 30 秒后 锁自动释放
  • 如果业务执行 超过 30 秒
  • 锁就会 提前过期

这时如果你想避免锁过期,就需要:

开发者自己写续期逻辑。

例如:

  • 定时任务
  • Lua脚本延长TTL

这种实现:

没有自动续期机制。


二、使用 Redisson 分布式锁

例如:

复制代码
RLock lock = redissonClient.getLock("order_lock");
lock.lock();

如果你 没有指定 leaseTime

复制代码
lock.lock();

Redisson 会启动 WatchDog 自动续期机制

默认逻辑:

  • 默认锁时间:30秒
  • 10秒 检查一次
  • 如果线程还持有锁 → 自动续期 30 秒

流程大概是:

复制代码
加锁
 ↓
设置TTL = 30s
 ↓
watchdog线程每10s检查
 ↓
如果锁还在被持有
 ↓
TTL重新设置为30s

所以只要:

业务线程没结束,锁就不会过期。


三、什么时候不会自动续期

如果你写的是:

复制代码
lock.lock(10, TimeUnit.SECONDS);

指定了 leaseTime = 10s

这时:

  • 不会启用 WatchDog
  • 10 秒后必定释放
  • 不会自动续期

这是 Redisson 的设计。

总结:

  • lock.lock()

    有自动续期(WatchDog)

  • lock.lock(10s)

    没有自动续期


四、为什么要有自动续期

因为业务执行时间 不可预测

例如:

复制代码
库存扣减
订单创建
支付回调
调用外部服务

如果锁固定 30 秒:

  • 业务执行 40 秒
  • 锁提前释放
  • 其他线程获得锁
  • 并发问题出现

WatchDog 的作用就是:

只要线程还活着,就一直续期。


五、面试常问的一个点

很多面试官会追问:

如果持锁线程宕机,锁会不会一直续期?

答案是:

不会。

因为:

  • WatchDog 是 客户端线程
  • JVM 挂掉 → WatchDog 也停止
  • Redis TTL 不再续期
  • 30 秒后锁自动释放

所以不会死锁。

相关推荐
Solis程序员4 小时前
跳出 CRUD:深入剖析 Redis 管道 Pipeline 底层通信机制
数据库·redis·缓存
夏贰四4 小时前
数据转换分哪些应用类型?数据转换如何做好规范管控?
大数据·数据库·数据转换
我科绝伦(Huanhuan Zhou)4 小时前
KingbaseES 数据库智能巡检工具
数据库
这个DBA有点耶5 小时前
2026下半年数据库趋势:多模、云原生、AI融合
数据库·人工智能·云原生
l1t5 小时前
DeepSeek总结的从 Crunchy PGO 迁移到使用 CloudNativePG 管理的 PostgreSQL 18
数据库·postgresql
夜雪闻竹5 小时前
Claude Code 对话自动导入完全指南
数据库·数据挖掘·copilot
恼书:-(空寄5 小时前
缓存:Redis7.0+、多级缓存设计、缓存三大问题解决方案
redis·缓存
云祺vinchin6 小时前
云祺x鼎捷,为制造企业ERP打造双保险
数据库·安全·制造
我滴老baby6 小时前
2026年AI Agent将走向何方?十大趋势深度解析:从多模态融合到自主决策,从端侧部署到具身智能,提前布局下一个万亿级市场
数据库·人工智能·知识图谱