【八股】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中的看门狗机制总结

相关推荐
想不明白的过度思考者3 分钟前
JavaEE进阶 ——【SpringBoot 快速上手】从环境搭建到HelloWorld实战
java·spring boot·spring·java-ee
那我掉的头发算什么4 分钟前
【SpringBoot】一篇文章讲清楚拦截器所有知识
java·spring boot·后端·spring
闲人编程11 分钟前
内存数据库性能调优
数据库·redis·字符串·高并发·哈希·内存碎片
he___H37 分钟前
抽象工厂模式
java·抽象工厂模式
mjhcsp1 小时前
C++ 后缀平衡树解析
android·java·c++
望舒5131 小时前
代码随想录day33,动态规划part2
java·算法·leetcode·动态规划
追随者永远是胜利者2 小时前
(LeetCode-Hot100)169. 多数元素
java·算法·leetcode·go
蜜獾云2 小时前
JAVA面试题速记-第1期-java基础
java·开发语言
百锦再2 小时前
Java中的反射机制详解:从原理到实践的全面剖析
java·开发语言·jvm·spring boot·struts·spring cloud·kafka
没有bug.的程序员2 小时前
Gradle 构建优化深度探秘:从 Java 核心到底层 Android 物理性能压榨实战指南
android·java·开发语言·分布式·缓存·gradle