分布式锁的key有什么特点?分布式锁是如何延期的?延期的触发机制有哪两种?

🧩 一、Redisson 分布式锁实现核心知识点

1. 锁的 key 特点

特点描述
唯一性每个锁 key 表示一个独立的资源,防止多客户端对同一资源同时操作
业务语义清晰常使用业务标识拼接(如 lock:order:12345
TTL机制默认设置过期时间,防止因服务宕机导致锁不释放(死锁)
可自动续期结合 WatchDog 实现自动延期(Redisson 特有)


2. Redisson 加锁方式

// 推荐写法,支持自动续期
RLock lock = redissonClient.getLock("lock:order:123");
lock.lock();  // 默认加锁 30 秒,后台 WatchDog 每 10 秒自动续期

// 非自动续期:指定 TTL 后不会自动续期
lock.lock(15, TimeUnit.SECONDS); // 指定锁15秒过期,WatchDog 不生效


🔄 二、Redisson 的 WatchDog 自动续期机制

✅ 自动续期原理

  • 默认锁定时间:30秒

  • 启动后台线程每 10 秒检查是否需要续期

  • 如果业务仍在执行中,续期 +30 秒(不会重叠)

⛓️ 自动续期图示(WatchDog):



Client A 线程请求加锁 ➜ 加锁成功(30s)  
   ⤷ 启动 WatchDog 守护线程,每 10s 检查锁状态  
        ⤷ 若未释放 ➜ 延期 30s  
        ⤷ 业务执行完 ➜ 手动 unlock() ➜ 结束续期


⚠️ 三、手动设定 TTL 与自动续期的区别

加锁方式自动续期适用场景
lock()执行时间不确定的业务逻辑
lock(leaseTime, unit)确定业务执行时间、自动释放锁
tryLock(timeout, unit)限时尝试获取锁,获锁后自动续期


♻️ 四、Redisson 分布式锁的可重入机制

  • 一个线程多次 lock() 同一个 key,不会阻塞自己。

  • 内部维护锁的 重入计数器unlock() 次数 = lock() 次数才真正释放锁。

RLock lock = redisson.getLock("lock:task");
lock.lock();   // 第一次加锁
lock.lock();   // 再次加锁,不会阻塞
lock.unlock(); // 减1,未释放
lock.unlock(); // 真正释放锁


🧱 五、Redisson 分布式锁 vs 原始 setnx 实现对比

特性Redisson原始 Redis setnx 实现
自动续期✅ WatchDog 自动续期❌ 需要自己实现定时任务
可重入✅ 支持线程可重入锁❌ 不支持
锁超时释放✅ TTL 后自动删除✅ 但要防止误删其他线程的锁
公平/读写锁支持✅ 提供公平锁、读写锁等多种模式❌ 需要自己封装
集群部署支持✅ 内建支持 Redis 集群、哨兵❌ 自己实现高可用较复杂
使用便捷性✅ 高封装,高可靠❌ 容易出错、重逻辑多


五、✅ Redisson 锁续期的两种方式(理解为“触发机制”)

续期方式说明
1. 自动续期(WatchDog)Redisson 默认行为,使用 lock() 时触发,看门狗线程每 10 秒自动续约一次 TTL,直到主动释放
2. 手动设定 TTL(不续期)使用 lock(long leaseTime, TimeUnit unit) 指定过期时间后,不再自动续期,TTL 到期自动释放锁

🎯 所以关键区别在于:

  • WatchDog 是自动续期的核心机制

  • ❌ 如果你手动设置了锁的过期时间(比如 lock(15, TimeUnit.SECONDS)),Redisson 不会启动 WatchDog


 

🧠 六、面试答题模板参考(简洁说辞)

1、我们项目中使用 Redisson 实现分布式锁,主要利用其自动续期机制(WatchDog),避免因执行时间不确定导致锁失效问题。
2、Redisson 默认每 10 秒续期一次锁 TTL,直到业务完成后手动释放,保证锁的可靠性。同时,它还支持可重入锁、读写锁、信号量等扩展能力,较原始 setnx 实现更健壮、易用。

3、Redisson 的锁续期机制有两种触发方式:

  • 一种是 自动续期,通过内部的 WatchDog 机制每 10 秒自动延长锁的 TTL,默认锁时间为 30 秒;

  • 另一种是 手动指定 TTL,这种情况下锁会在指定时间后自动释放,但不会触发自动续期;

我们项目中使用默认 lock() 方式,以保证执行时间不可控的任务不会因 TTL 到期而丢锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值