Redisson分布式锁原理

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

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

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

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

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

参考1
参考2

相关推荐
正在走向自律5 小时前
高并发场景下一卡通系统数据库架构设计与实践
数据库·分布式·一卡通系统
西***63476 小时前
多领域落地验证:分布式 KVM 如何成为指挥中心的 “协同核心引擎”
分布式
安科瑞解决方案一站通6 小时前
分布式光储监控系统的四个实战样本:从分散走向聚合的技术路径
分布式·微电网·电力·配电·零碳园区·用电安全
知识即是力量ol6 小时前
深入理解 Snowflake 雪花算法:原理、本质、趋势递增问题与分布式顺序困境全解析
java·分布式·算法·雪花算法·snowflake·全局唯一id·分布式id生成器
gs801406 小时前
从零到一:构建高可用分布式 Server-Sent Events (SSE) 实时推送系统
分布式·sse
2301_775763026 小时前
从零到一:用 openYuanrong 训练分布式强化学习 Agent(完整实操指南)
分布式
薛定e的猫咪6 小时前
【Bayesian Analysis 2023】大数据背景下的分布式贝叶斯模型选择
大数据·分布式·算法·数学建模
键盘鼓手苏苏17 小时前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
Coder_Boy_1 天前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件
星辰_mya1 天前
Kafka 的 KRaft 模式
分布式·kafka