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

相关推荐
NCIN EXPE4 小时前
redis 使用
数据库·redis·缓存
lUie INGA4 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
hERS EOUS4 小时前
nginx 代理 redis
运维·redis·nginx
geBR OTTE4 小时前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
Porunarufu4 小时前
博客系统UI自动化测试报告
java
Aurorar0rua5 小时前
CS50 x 2024 Notes C - 05
java·c语言·数据结构
NoSi EFUL6 小时前
redis存取list集合
windows·redis·list
Deepincode6 小时前
Redis源码探究系列—SDS 扩容策略与内存预分配机制
redis
Cosmoshhhyyy6 小时前
《Effective Java》解读第49条:检查参数的有效性
java·开发语言
布谷歌6 小时前
常见的OOM错误 ( OutOfMemoryError全类型详解)
java·开发语言