Redisson实现分布式锁(看门狗机制)

server/2024/9/22 16:58:03/

目录

可重入锁:

 锁重试和看门狗机制:

主从一致性:


首先引入依赖,配置好信息

3.使用Redisson的分布式

可重入锁:

可重入锁实现是通过redsi中的hash实现的,key依旧是业务名称加id,然后第一个field存储线程唯一标识,value存储上锁的计数,同一个线程获取多次锁通过对锁的计数+来实现,释放通过-1来实现,当锁的数为零且锁是当前线程的锁的时候才可以释放锁

获取锁的lua脚本如下:

1.首先通关exists去判断这个key是否有锁

2.如果没有锁,则直接获取锁,通过hset命令创建所,通过expire设置过期时间。 

3.如果锁存在,则根据field中存储的线程标识判断是否是当前线程的锁

3.1 如果是自己的,则获得锁,通过hincrby将锁的重入次数加1,并设置有效期

3.2 如果锁不是自己的,则获取失败

释放锁的lua脚本如下:

1.首先判断锁是否被自己持有,根据线程波标识,如果不是自己的,说明已经被释放

2.如果线程是自己的,则判断锁的重入次数是否大于0,

2.1 如果大于0说明不能释放,则对重入次数-1并重置有效期

2.2 如果等于0,则释放锁

 锁重试和看门狗机制:

   获取锁:

1.首先线程进入之后会尝试获取锁,

1.1如果获取成功,且没有设置过期时间,则会自动设置一个看门狗,锁有效期为30s,看门狗会每隔10s去检查线程是否执行完成,如果没有执行完成,则继续续10s时长, 

1.2如果获取锁失败,则进入自旋去不断尝试获取锁,这中间有个判断剩余时间,如果超时,则返回false,如果没超时且拿到了释放锁的信号,则去尝试获取锁

释放锁:

1.线程首先尝试去释放锁,如果释放锁成功,则发送释放锁的消息,并取消看门狗

2.如果失败则记录异常并返回

总结:

可重入redisson不同于redsi的setnx,他利用hash结构记录线程id和重入次数。

可重试:利用信号量,获取锁失败的会在等待时间内不断重复去获取锁

超时续约:利用看门狗机制,默认30s,每隔10s去判断锁是否释放,如果没释放则续期重置时间,释放则取消看门狗。

那么到这里我们已经解决了三个问题,现在还有主从一致性问题没有解决:

主从一致性:

redis的主从模式是指有一个主节点和多个从节点,主节点负责写操作,从节点负责读操作

主从同步是有一定延迟性的,所以这里需要确保主从的同步

这里就可以设置多个独立节点来实现,redisson封装了一个getMutiLock方法,他会尝试去获取每一个节点上的锁,只有都获取成功,才会真正拿到锁

获取锁之后使用方法和以前是一样的。

这样可以确保多节点的一致性,但是缺点就是运维成本较高,实现复杂


http://www.ppmy.cn/server/120366.html

相关文章

记录一下ElementUI 3 在浏览器导入, table表格显示问题

当时问题忘了截图, 现在通过文字记录一下问题 我直接在html了引入 vue3 和 ElementUI 3 , 使用了table组件, 但是表格的td 总是只显示一列, 问题是我的 el-table-column 标签 没有结束标签 , 在vue文件模块化里写不需要结束标签, 在浏览器里无法直接识别出来, 所以他是渲染了第…

【Flink实战】flink消费http数据并将数组展开多行

文章目录 一. 需求描述二. 方案思路1. 解决思路2. flink json 解析2.1. 通过json path解析非array数据2.2. 通过json path解析array数据 3. CROSS JOIN逻辑 三. 方案实现1. http json数据样例2. flink sql 说明 一. 需求描述 flink消费http接口的数据,将json中的数…

sqlgun靶场通关攻略

尝试在URL中测试一下sql注入,但是禁止注入 那么在输入框中测试一下xss,存在xss,那么极有可能如果存在sql注入在这里 在测试时,出现了这个搜索框的源代码,可以看出是单引号包含,所以可以测试闭合方式为单引号的sql注入 …

笔记:DrawingContext和GDI+对比简介

一、目的:分享一个wpf中级控件,鼠标放上展开其他控件的效果 DrawingContext 和 GDI 的 Graphics 类都是用于绘图的技术,但它们属于不同的图形库和框架,适用于不同的场景。让我们详细比较一下这两者。 二、对比 DrawingContext Dra…

专题·大模型安全 | 生成式人工智能的内容安全风险与应对策略

正如一枚硬币的两面,生成式人工智能大模型(以下简称“生成式大模型”)在助力内容生成的同时也潜藏风险,成为虚假信息传播、数据隐私泄露等问题的温床,加剧了认知域风险。与传统人工智能(AI)相比…

【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“

【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“ 1.题目 下方是力扣官方题目的地址 63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下…

Elasticsearch 检索优化:停用词的应用

Elasticsearch 检索优化:停用词的应用 场景描述 目前在 Elasticsearch 集群中存储约 1.5 亿篇文章数据,随着数据量的增加,检索性能问题逐渐显现。在列表检索和聚合操作中,CPU 消耗飙升至 100%,并且检索耗时较长&…

SSM+vue音乐播放器管理系统

音乐播放器管理系统 随着社会的发展,计算机的优势和普及使得音乐播放器管理系统的开发成为必需。音乐播放器管理系统主要是借助计算机,通过对首页、音乐推荐、付费音乐、论坛信息、个人中心、后台管理等信息进行管理。减少管理员的工作,同时…