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

相关推荐
YOU OU32 分钟前
SpringBoot 配置文件
java·spring boot·后端
c++之路33 分钟前
观察者模式(Observer Pattern)
java·网络·观察者模式
Dicky-_-zhang35 分钟前
云原生存储与数据库选型实战:从传统数据库到云原生数据库的演进
java·jvm
凝小飞40 分钟前
cucumber JAVA 一键部署指南
java·集成测试·模块测试
java修仙传41 分钟前
Java 实习日记:断面状态筛选 Bug 修复与对比案例日期过滤优化
java·bug·实习
长谷深风11143 分钟前
Java并发编程:线程安全与多线程实战指南【个人八股】
java·安全·线程·进程·juc·并发与并行·上下文切换(性能影响因素)
basketball6161 小时前
C++ 强制类型转换:从 C 风格到 C++ 四大金刚
java·c语言·c++
IronMurphy1 小时前
Redis拷打第七讲(最终章)
数据库·redis·php
Dicky-_-zhang1 小时前
容器网络CNI实战:从零搭建网络插件
java·jvm
Mahir081 小时前
Spring 事务深度解析:核心原理与 12 种事务失效场景全解
java·spring·面试·事务失效