【八股】Redisson分布式锁

Redisson分布式锁

主要了解了Redisson分布式锁实现的三个功能:

1.可重入 -> 防止死锁

2.可重试(i.e. 非阻塞获取锁)

3.自动续约

1. 可重入

原理:

利用Redis的Hash结构,记录了使用当前锁的线程id和重用次数,避免了可能造成的死锁问题。

存储的锁的内容如下图所示:

2. 可重试

不会一直去重试获取锁造成cpu资源的浪费 ,而是通过pubsub还有信号量的机制,实现了只有当别的线程释放锁,才会唤醒当前未成功获取锁的线程继续去尝试获取锁,
Redis的pubsub机制:

信号量:

3. 自动续约 (看门狗机制)

只有当我们不指定leaseTime,也就是不指定持有锁的时间长度时,才会启动看门狗机制。如下图所示:

默认的看门狗机制时把持有锁的剩余时长指定为30秒,然后每过leaseTime的1/3,默认就是10秒,就会重置持有锁的剩余时长为30秒。我们也可以修改Redisson的配置,把默认持有锁时长30s改成自己想要的时长。

看门狗机制的实现如下:

有个方法(renewExpiration)会启用一个延时任务,每次过了 1/3 leastTime时就会重置持有锁的TTL,重置完只有然后再调用自己,就实现了不断给锁续约的效果。

参考文章:

redisson中的看门狗机制总结

相关推荐
惊讶的猫4 分钟前
Springboot 组件注册 条件注解
java·spring boot·后端
c++之路17 分钟前
Linux进程池与线程池深度解析:设计原理+实战实现(网盘项目架构)
java·linux·架构
阿里云基础软件19 分钟前
当 CPU 莫名抖动时,SysOM Agent 如何 3 分钟定位元凶?
java·阿里云·智能运维·操作系统控制台·sysom
蜜獾云27 分钟前
从linux内核理解Java怎样实现Socket通信
java·linux·运维
wregjru1 小时前
【读书笔记】Effective C++ 条款5~6:若不想使用编译器自动生成的函数,就该明确拒绝
java·开发语言
华科易迅1 小时前
SQL学习
java·sql·学习
语戚1 小时前
从 JVM 底层拆解:i++、++i、i+=1、i=i+1 的实现逻辑与坑点
java·开发语言·jvm·面试·自增·指令·虚拟机
StackNoOverflow1 小时前
Spring核心知识精讲:IoC容器、Bean作用域生命周期与AOP(第二部分)
java·后端·spring
野生技术架构师1 小时前
Java面试精选:数据库 + 数据结构 +JVM+ 网络 +JAVA+ 分布式
java·数据库·面试
银河麒麟操作系统1 小时前
银河麒麟服务器操作系统IO机制详解
数据库·redis·缓存