Redisson 分布式锁源码 02:看门狗

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,倚天版 1GB 1个月
简介: 说起 Redisson,比较耳熟能详的就是这个看门狗(Watchdog)机制。本文就一起看看加锁成功之后的看门狗(Watchdog)是如何实现的?

前言


说起 Redisson,比较耳熟能详的就是这个看门狗(Watchdog)机制。

本文就一起看看加锁成功之后的看门狗(Watchdog)是如何实现的?


加锁成功

在前一篇文章中介绍了可重入锁加锁的逻辑,其中 RedissonLock#tryAcquireAsync 方法是进行异步加锁的逻辑。

网络异常,图片无法展示
|


回顾一下这个方法的入参:

  1. waitTime:-1;
  2. leaseTime:-1,加锁时未指定锁时间,则为 -1,如果指定,则是指定的时间;
  3. unit:null;
  4. threadId:当前线程 id。


其中的 tryLockInnerAsync 在之前已经介绍过了。

当加锁成功时,会返回 null,加锁失败,会返回当前锁的剩余时间。

所以这块会进入到红框标记的部分。

网络异常,图片无法展示
|

leaseTime 为加锁时间,默认不指定,所以会进入到 scheduleExpirationRenewal 方法,也就是今天的主题:看门狗。

至此可以得出一个结论:

Redisson 看门狗(Watchdog)在指定加锁时间时,是不会对锁时间自动续租的。

看门狗

网络异常,图片无法展示
|

看门狗的一部分重点逻辑就在 renewExpiration 方法这里:

  1. 延迟调度,延迟时间为:internalLockLeaseTime / 3,就是 10s 左右后会调度这个 TimerTask;
  2. 异步续租:逻辑都在 renewExpirationAsync 里面;
  3. 递归调用:当续租成功之后,重新调用 renewExpiration 自己,从而达到持续续租的目的;
  4. 当然也不能一直无限续租,所以中间有一些判断逻辑,就是用来中断续租的。


续租逻辑

网络异常,图片无法展示
|

这块也是一个 lua 脚本,就是将之前的 redis key 直接重新设置时间。

这样一通续租下来,就是在过了 10s 左右将锁的时间重新设置为 30s


总结


至此,看门狗介绍完毕,简要总结一下内容。

  1. 只有在未指定锁超时时间时才会使用看门狗;
  2. 看门狗默认续租时间是 10s 左右,internalLockLeaseTime / 3
  3. 可以通过 Config 统一设置看门狗的时间,设置 lockWatchdogTimeout 参数即可。

最后,同样使用一张图,进行下总结:

网络异常,图片无法展示
|


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
Java 编译器 数据库
Spring Boot 整合 redisson 实现分布式锁
Spring Boot 整合 redisson 实现分布式锁
71 1
|
26天前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
2月前
|
NoSQL Redis
redis分布式锁redisson
底层会尝试去加锁,如果加锁失败,会睡眠,自旋加锁,直到获取到锁为止。
39 1
|
2月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
159 0
|
30天前
|
负载均衡 NoSQL Java
|
2月前
|
缓存 NoSQL 安全
玩转Redis!非常强大的Redisson分布式集合,少写60%代码
Redisson是Java的Redis客户端,提供实时数据平台服务,简化了分布式环境下的数据管理。它包含RList、RSet、RMap等分布式集合,支持ConcurrentMap和Set接口,确保线程安全和数据一致性。例如,RMap实现了本地缓存和监听器功能,允许数据监听和本地加速读取。此外,还提供了RSet的排序和去重功能,以及RQueue和RBlockingQueue等队列实现,支持阻塞操作。通过Redisson,开发者能轻松处理分布式系统的数据同步和操作。
|
2月前
|
监控 NoSQL Java
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
22 0
|
3月前
|
NoSQL Java Redis
分布式延时消息的另外一种选择 Redisson (推荐使用)
分布式延时消息的另外一种选择 Redisson (推荐使用)
238 1
|
3月前
|
编解码 NoSQL Java
Springboot框架使用redisson实现分布式锁
Redisson是官方推荐的Java Redis客户端,提供丰富的功能,包括默认的分布式锁支持。它可以无缝替代Spring Boot 2.x的Letture客户端,不影响原有RedisTemplate和Redis Repository的使用。集成包括spring-boot-starter-data-redis和redisson-spring-boot-starter,后者需排除默认的redisson-spring-data-23以匹配Spring Data Redis v.2.2.x。
88 0
|
3月前
|
存储 NoSQL Java
Redisson实现分布式锁
Redisson实现分布式锁
62 0

热门文章

最新文章