Redisson分布式锁 原理&源码 分析

# 基于setnx实现的分布式锁存在的问题:

# 为了解决上面的问题,可以用Redisson

# Redisson入门

# Redisson可重入锁原理

获取锁的Lua脚本:

释放锁的Lua脚本:

# 锁重试原理分析

tryLock()底层代码分析

time :剩余的等待重试时间 ttl:现被持有的锁的剩余有效时间

计算尝试获取锁所消耗的时间,然后再计算出等待获取锁的剩余时间time,

如果time<=0,则不再重试了直接返回获取锁失败,

如果time>0,则通过subscribe去订阅别人释放锁的通知信号,如果在剩余的等待重试时间time里还没有等到通知信号,则取消订阅;

如果在剩余的等待重试时间里订阅到释放锁的信号了,就再重新计算一次剩余的等待重试时间time,如果time>0,则进入while(true)循环中尝试获得锁。

释放锁的lua脚本中的发布消息通知

# 看门狗更新锁有效时间 源码分析

# 释放锁源码

# 总结

相关推荐
Heliotrope_Sun7 小时前
Redis
数据库·redis·缓存
boonya10 小时前
Redis核心原理与面试问题解析
数据库·redis·面试
上官浩仁10 小时前
springboot redisson 缓存入门与实战
spring boot·redis·缓存
没有bug.的程序员10 小时前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
AAA修煤气灶刘哥13 小时前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud
小马爱打代码13 小时前
面试题:Redis要点总结(进阶)
redis
络714 小时前
Redis 非缓存核心场景及实例说明
数据库·redis·缓存
ClouGence14 小时前
Redis 双向同步如何避免循环?【附实操演示】
redis
爬山算法17 小时前
Redis(50) Redis哨兵如何与客户端进行交互?
数据库·redis·交互
YS_Geo18 小时前
Redis 深度解析:数据结构、持久化与集群
数据结构·数据库·redis