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

相关推荐
人道领域2 分钟前
Spring拦截器原理与实战详解
java·运维·服务器
LSL666_2 分钟前
1.3 云服务器安装和使用Redis
数据库·redis·缓存
茶杯梦轩6 分钟前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端
LSL666_6 分钟前
1.4 Redis服务端和客户端
数据库·redis·缓存
振鹏Dong16 分钟前
ReActAgent 源码深度拆解:从调用入口到 ReAct-Loop,读懂智能体 “推理 - 行动” 范式
java·人工智能·spring·ai
LSL666_18 分钟前
1.7 Redis多数据库
数据库·redis·缓存
QQ 313163789028 分钟前
文华财经期货指标公式大全精品套装无未来
java
前路不黑暗@1 小时前
Java项目:Java脚手架项目的模板服务和网关服务的实现(三)
java·开发语言·spring boot·git·学习·spring cloud·maven
heimeiyingwang1 小时前
向量数据库Milvus的安装部署指南
java·数据库·架构·database
马尔代夫哈哈哈1 小时前
SpringBoot 统一功能处理
java·前端·spring boot