Redisson分布式锁原理

Redisson是基于Redis实现的客户端库,提供了多种Java并发API映射到Redis中,也实现了各种分布式服务,其中就有各种分布式锁的实现。

Redisson锁弥补了SETNX锁的的局限性,实现了可重入、可重试和超时续约的功能。

  • 可重入:利用redis的 hash 结构记录线程 id 和重入次数。每次获取锁时,先判断锁是否存在,如果不存在,则直接获取,如果已经存在,且线程标识为当前线程,则可以再次获取,并将重入次数加 1。释放锁时,每释放一次,重入次数减 1,直至重入次数减为 0,则证明所有的业务已经执行结束,则可以直接释放锁。整个过程是采用lua脚本实现的。

  • 可重试:利用信号量和 PubSub 功能实现等待、唤醒,获取锁失败的重试机制。在第一次尝试获取锁失败后,并不是立即失败,而是去等待释放锁的信号(利用了 Redis 中 PubSub 机制)。而获取锁成功的线程在释放锁的时候,就会向等待中的线程发送一条消息,等待中的线程捕获到消息后,就可以重新尝试获取锁。如果重试失败,则会继续等待释放锁的信号,然后再去重试。当然,重试并不是无限次的,会有一个等待时间,如果超过等待时间,就结束重试。

  • 超时续约:利用 watchDog,每隔一段时间(releaseTime/3),重置超时时间。简单来说,就是在获取锁成功后,会开启一个定时任务,该定时任务每隔一段时间就会重置锁的超时时间,这样锁的超时时间就会重新计时。

参考1
参考2

相关推荐
脑子加油站3 分钟前
OpenEuler24.03 分布式配置redis 集群
数据库·redis·分布式·php·nginx代理
想你依然心痛1 小时前
HarmonyOS 5.0工业物联网开发实战:构建分布式智能制造监控与数字孪生预测维护系统
分布式·物联网·harmonyos·数字孪生
zhixingheyi_tian1 小时前
Hadoop 之 native 库
大数据·linux·hadoop·分布式
蓝魔Y2 小时前
Apache—Kafka实践
分布式·kafka·apache
七夜zippoe2 小时前
DolphinDB数据模型:表、分区与分布式表
分布式·wpf·数据模型··dolphindb
ZC跨境爬虫2 小时前
纯requests+Redis实现分布式爬虫(可视化4终端,模拟4台电脑联合爬取)
redis·分布式·爬虫·python
rit843249916 小时前
单向拓扑结构下异构车辆排的分布式模型预测控制(DMPC)
分布式
我要用代码向我喜欢的女孩表白18 小时前
在spark集群上在部署一套spark环境,不要影响过去环境
大数据·分布式·spark
2603_9547083120 小时前
多微电网系统架构:集群协同与能量互济的网络设计
网络·人工智能·分布式·物联网·架构·系统架构
8Qi820 小时前
RabbitMQ高级篇:消息可靠性、幂等性与延迟消息
java·分布式·微服务·中间件·rabbitmq·springcloud