Redisson 分布式锁原理分析

Redisson 分布式锁原理分析

示例程序

示例程序:

public class RedissonTest {public static void main(String[] args) {Config config = new Config();config.useSingleServer().setPassword("123456").setAddress("redis://127.0.0.1:6379");RedissonClient redisson = Redisson.create(config);// RLock对象RLock lock = redisson.getLock("MY_KEY");ExecutorService pool = Executors.newFixedThreadPool(5);IntStream.range(1, 5).forEach(item -> {pool.execute(() -> {try {if (lock.tryLock(2000, TimeUnit.MILLISECONDS)) {System.out.println(Thread.currentThread().getName() + "get Lock!!");if (lock.tryLock(2000, TimeUnit.MILLISECONDS)) {System.out.println(Thread.currentThread().getName() + "get Lock!!");Thread.sleep(300000);lock.unlock();}Thread.sleep(500000);lock.unlock();}} catch (Exception e) {System.out.println("error!!");}});});}
}

运行结果:
image.png

redis中的值:
image.png

原理

分布式锁实现加锁解锁都需要使用lua脚本。
利用Redis的Hash结构实现可重入。

Hash结构存值如下:

keyfieldvalue
  • key:就是分布式锁的key
  • field:用于存储一个能够表示一个线程的唯一标识(Redisson使用的UUID)
  • value:表示当前锁被同一个线程加锁的次数(可重入的实现方式)

下面以key为MY_KEY,field线程唯一标识为:WWSSWWWKKII99I为例,总结下加锁解锁流程:

加锁流程

加锁流程:

加锁之后,hash结构为

keyfieldvalue
MY_KEYWWSSWWWKKII99I1

实际的存储示例:
一个线程获取了一次:
image.png
一个线程获取了两次(可重入):
image.png

解锁流程

解锁流程:
假设当前锁的hash结构是

keyfieldvalue
MY_KEYWWSSWWWKKII99I2

这代表分布式锁 MY_KEY 被线程标识为 WWSSWWWKKII99I 的线程获取了两次

需要注意,整个加锁解锁的命令全都需要使用lua脚本。这样能保证操作的原子性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/279082.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新Java面试题2【2024初级】

下载链接:博主已将以上这些面试题整理成了一个面试手册,是PDF版的 互联网大厂面试题 1:阿里巴巴Java面试题 2:阿里云Java面试题-实习生岗 3:腾讯Java面试题-高级 4:字节跳动Java面试题 5:字…

Apache Dolphinscheduler - 无需重启 Master-Server 停止疯狂刷日志解决方案

记录的是一个 3.0 比较难搞的问题,相信不少使用过 3.0 的用户都遇到过 Master 服务中存在一些工作流或者任务流一直不停的死循环的问题,导致疯狂刷日志。不过本人到现在也没找到最关键的触发原因,只是看到一些连锁反应带来的结果…… 影响因素…

第十届教育技术前沿国际会议(ICFET 2024)即将召开!

ICFET 2024 | Malacca, MalaysiaInstallation Documentation for your Bootstrap Templatehttp://www.ICFET.org/ 组织单位: 会议主题: 整合教育技术 社交媒体和社交网络 语义网 3.0 播客播放视频讲座 播客向学生提供反馈 Wiki 和博客在高等教育中的…

MySQL最实用面试题(2024-3-14持续更新中)

MySQL篇面试题 一、介绍 ​ 这是由小龙同学自己总结领悟的mysql面试题的解析,也是面试宝典 二、题目 1.数据库三大范式: –作用: ​ 使表结构清晰,减少数据冗余(简单讲就是重复),提高查询…

《探索AI辅助研发的未来之路》

在当今科技飞速发展的时代,人工智能(AI)已经逐渐渗透到各个领域,其中之一便是研发领域。AI辅助研发正以惊人的速度改变着我们对于创新和发现的理解。本文将从技术进展、行业应用、挑战与机遇、未来趋势、法规影响以及人才培养等方…

STP环路避免实验(华为)

思科设备参考:STP环路避免实验(思科) 一,技术简介 Spanning Tree Protocol(STP),即生成树协议,是一种数据链路层协议。主要作用是防止二层环路,并自适应网络变化和故障…

Vue+SpringBoot打造民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

GPT-5:人工智能的下一个前沿即将到来

当我们站在人工智能新时代的门槛上时,GPT-5即将到来的呼声愈发高涨且迫切。作为革命性的GPT-3的继任者,GPT-5承诺将在人工智能领域迈出量子跃迁式的进步,其能力可能重新定义我们与技术的互动方式。 通往GPT-5之路 通往GPT-5的旅程已经标记着…

鸿蒙-自定义组件的生命周期

目录 自定义组件的生命周期 1.aboutToAppear 2.aboutToDisappear 3.onPageShow 4.onPageHide 5.onBackPress 日志输出 1.显示页面 2.页面点击返回按钮 3.页面跳转 4.页面返回 自定义组件的生命周期 先来一段列子 import router from ohos.router Entry Component…

如何对医院运营管理进行3D可视化监控?推荐帆软智慧医院建设

智慧医院是运用云计算、大数据、物联网、移动互联网和人工智能等技术,通过建立互联、物联、感知、智能的医疗服务环境,整合医疗资源,优化医疗服务流程,规范诊疗行为,提高诊疗效率,辅助临床决策和医院管理决…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Text)

显示一段文本的组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 可以包含Span和ImageSpan子组件。 接口 Text(content?: string | Resource, value?: TextOptions) 从API versi…

四.排序(冒泡/选择)

目录 11-排序介绍 常见排序算法: 12-冒泡排序介绍 代码要求: 思路: 13-冒泡排序 代码: 14-选择排序 简单写法: 好的写法: 11-排序介绍 排序:将一组“无序”的记录序列调整为“有序”的记录序列。 列表排序:将无序列表变为有序列表 输入&#…

Samtec科普 | 一文了解患者护理应用连接器

【摘要/前言】 通过医疗专业人士为患者提供护理的种种需求,已经不限于手术室与医院的各种安全状况。当今许多患者的护理都是在其他环境进行,例如医生办公室、健康中心,还有越来越普遍的住家。尤其是需要长期看护的患者,所需的科技…

达梦数据库SQL

达梦JSON函数技术文档 SQL中关键词处理 -- 必须要使用双引号包裹 select id,"comment" from t_cmp_rd_process;select id,"commit" from t_cmp_rd_gjj_eva;JSON_EXTRACT函数 -- party_sup_other_json 是包含JSON数据的列名。 -- $.content_abstract 是J…

Vue.js 应用实现监控可观测性最佳实践

本文由观测云团队编写~ 前言 Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。 …

DNF的概念和操作命令

yum是linux系统中基于rpm包管理的一种软件管理工具。 在dnf.conf文件中,我们可以配置某个网络服务器位软件源仓库。配置的方法,就是用vim编辑/etc/dnf/dnf.conf这个文件。

可视化展示与交互编辑:探索3D Web轻量化平台HOOPS WEB Platform在BIM中的新可能性

随着数字技术的飞速发展,建筑行业也在不断迈向数字化转型的道路。在这个过程中,BIM(Building Information Modeling,建筑信息模型)技术已经成为建筑设计、施工和管理领域中的一项重要工具。 而在BIM的应用中&#xff…

【01】htmlcssgit网络基础知识

一、html&css 防脱发神器 一图胜千言 使用border-box控制尺寸更加直观,因此,很多网站都会加入下面的代码 * {margin: 0;padding: 0;box-sizing: border-box; }颜色的 alpha 通道 颜色的 alpha 通道标识了色彩的透明度,它是一个 0~1 之间的取值,0 标识完全透明,1…

机器学习-04-分类算法-03KNN算法

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与knn算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

【计算机网络篇】物理层(2)传输方式

文章目录 🍔传输方式⭐串行传输和并行传输⭐同步传输和异步传输🎈同步传输🎈异步传输 ⭐单向通信,双向交替通信和双向同时通信 🍔传输方式 在物理层中,传输方式是指数据在传输介质中传输的方式和方法。常见…