Redisson 看门狗机制:让分布式锁“活”下去的智能保镖

目录

​编辑

一、问题来了:锁,怎么突然没了?

[二、笨办法 vs 聪明办法](#二、笨办法 vs 聪明办法)

笨办法:手动延长锁时间

[聪明办法:Redisson 的"看门狗"](#聪明办法:Redisson 的“看门狗”)

三、看门狗是怎么工作的?

背后发生了什么?

四、重要前提:什么时候才启动看门狗?

五、为什么叫"看门狗"?

六、总结:记住这三点


一句话总结

看门狗 = 一个会自动给锁"续命"的小助手,只要你还在干活,它就保证你的锁不会过期!


一、问题来了:锁,怎么突然没了?

想象一下这个场景:

你正在厨房炒菜(执行业务逻辑),为了防止别人进来打翻锅,你锁上了厨房门(获取分布式锁)。

但你设了个 30 秒自动解锁(TTL = 30s)------这是为了防止你万一晕倒了,别人永远进不来。

结果......你这道菜要炒 60 秒

刚到第 31 秒,门自动开了

这时你老婆以为你炒完了,推门进来拿酱油------砰!油锅打翻,厨房起火!🔥

这就是分布式系统中的经典问题:

业务还没跑完,锁却过期了,导致多个线程同时操作,数据乱成一锅粥!


二、笨办法 vs 聪明办法

笨办法:手动延长锁时间

  • 你预估业务要 60 秒,就设 TTL = 120 秒。
  • 但万一网络卡顿,跑了 150 秒?还是可能出事。
  • 而且很多业务根本没法预估时间(比如用户上传文件)。

聪明办法:Redisson 的"看门狗"

Redisson 说:"别猜了,我来盯着你!"

它干了这么一件事:

只要你还在厨房里(线程还活着),我就每隔 10 秒帮你把门锁重新设成 30 秒!

这样,哪怕你炒 10 分钟,门也一直锁着;

一旦你离开厨房(释放锁或程序崩溃),我就不再续命,30 秒后自动开门------安全又省心!


三、看门狗是怎么工作的?

我们用代码说话:

复制代码
RLock lock = redisson.getLock("kitchen_door");

// 没写过期时间 → 启动看门狗!
lock.lock(); 

try {
    // 炒菜(业务逻辑)
    cookFor(60_000); // 模拟60秒
} finally {
    lock.unlock(); // 主动开门,看门狗停止
}

背后发生了什么?

时间 动作
T=0s 加锁,Redis 中 kitchen_door 的 TTL = 30 秒
T=10s 看门狗检查:你还在炒菜吗?→ 是 → TTL 重置为 30 秒
T=20s 再次检查 → 还在 → TTL 又重置为 30 秒
T=30s ......持续续命
T=60s 你调用 unlock() → 删除锁,看门狗下班

默认规则:

  • 初始 TTL = 30 秒
  • 续期间隔 = 每 10 秒(即 TTL 的 1/3)

四、重要前提:什么时候才启动看门狗?

只有这一种情况

复制代码
lock.lock(); // 没有传 leaseTime 参数!

如果你写了:

复制代码
lock.lock(10, TimeUnit.SECONDS); // 明确指定10秒过期

那 Redisson 就会说:"好,10秒后自动开锁,我不插手!"看门狗不会启动!

所以,想用看门狗,就别手动设过期时间


五、为什么叫"看门狗"?

因为它的行为就像一只忠诚的狗🐶:

  • 主人(你的线程)在家 → 它守着门,不让外人进;
  • 主人一直没出门 → 它不断加固门锁;
  • 主人出门了(unlock)→ 它就休息;
  • 主人突然消失(JVM 崩溃)→ 它等 30 秒,确认主人回不来了,才允许别人进门。

既防止死锁,又保证安全


六、总结:记住这三点

  1. 看门狗 = 自动续期锁的后台任务
  2. 只在 lock()(无参数)时启用
  3. 只要你的代码还在跑,锁就永远不会过期
相关推荐
跟着珅聪学java3 小时前
在电商系统中,如何确保库存扣减的原子性
分布式
一点 内容7 小时前
深入理解分布式共识算法 Raft:从原理到实践
分布式·区块链·共识算法
8Qi87 小时前
分布式锁-redission
java·redis·分布式·redisson
7 小时前
鸿蒙——分布式数据库
数据库·分布式
Hui Baby8 小时前
分布式多阶段入参参数获取
分布式
阿拉斯攀登10 小时前
Spring Cloud Alibaba 生态中 RocketMQ 最佳实践
分布式·微服务·rocketmq·springcloud·cloudalibaba
无锡布里渊10 小时前
感温光纤 DTS 系统 vs 感温电缆 对比分析报告
分布式·实时监测·分布式光纤测温·线型感温火灾监测·感温电缆
g323086311 小时前
分布式框架seata AT模式源码分析
java·数据库·分布式
哇哈哈&11 小时前
如何进行卸载rabbitmq
分布式·rabbitmq