redis面试(十五)公平锁队列重排
队列重拍
先说一下当前的加锁状态
- anyLock由客户端A持有
- 队列中是客户端B、客户端C
- 并且客户端B现在是排在头部
那么队列重拍就是队列中某个客户端长时间没有重新申请加锁,没有刷新分数,就会被队列中挤掉。
假设这个长时间没有加锁的客户端是B。
总结
分析代码有些啰嗦,所以先总结流程:
- 客户端B长时间没有加锁,没有刷新时间分数
- 客户端C加锁刷新之后,分数超过了B
- 那就将客户端B的线程从队列中移除,客户端 C变成头部
- 客户端B如果再次申请加锁的话,会排在C的后面
- 这个就是队列重排
过程
恍恍惚惚的,又行进到了10:00:36秒,客户端C来进行的重新尝试进行加锁,此时客户端B他其实在这之前不知道可能因为网络原因或者是别的什么原因,可能他就是没有尝试过重新加锁
进入while true,拿到队列第一个元素的timeout时间,10:00:30 <= 10:00:36,条件成立
zrem redisson_lock_timeout:{anyLock} UUID_02:threadId_02,就从有序集合中将客户端B移除了,lpop redisson_lock_queue:{anyLock},就从队列中将客户端B也移除了

此时队列的第一个元素是客户端C,他的timeout时间是10:00:35 <= 10:00:36,条件成立,从有序集合以及队列中删除掉客户端C
尝试进行加锁,不成立,因为客户端A还持有着那把锁
重新排队入队,pttl anyLock = 23000毫秒
ttl = 23000毫秒
timeout = 23000毫秒 + 10:00:36 + 5000毫秒 = 10:01:04
zadd和rpush两个指令,将客户端C压入队列和有序集合中
假设此时,在10:00:38,客户端B再次尝试来进行加锁,while true退出
尝试加锁,不成立
重新尝试入队
ttl = 10:01:04 - 10:00:38 = 26000毫秒
timeout = 26000毫秒 + 10:00:38 + 5000毫秒 = 10:01:09
zadd和rpush两个指令,重新尝试入队

从这个里面,我们可以看到,在一个客户端刚刚加锁之后,其他的客户端来争抢这把锁,刚开始在一定时间范围之内,时间不要过长,各个客户端是可以按照公平的节奏,在队列和有序集合里面进行排序
在一定时间范围内,时间不要过长,其实队列里的元素顺序是不会改变的,各个客户端重新尝试加锁,只不过是刷新有序集合中的分数(timeout),各个客户端的timeout不断加长,但是整体顺序大致还是保持一致的
但是如果客户端A持有的锁的时间过长,timeout,这个所谓的排队是有timeout,可能会在while true死循环中将一些等待时间过长的客户端从队列和有序集合中删除,一旦删除过后,就会发生各个客户端随着自己重新尝试加锁的时间次序,重新进行一个队列中的重排,也就是排队的顺序可能会发生变化
客户端跟redis通信的网络的一个问题,延迟,各种情况都可能会发生
客户端释放锁,释放锁之后队列中的排队的客户端是如何依次获取这把锁的,是按照队列里的顺序去获取锁的
相关文章:
redis面试(十五)公平锁队列重排
队列重拍 先说一下当前的加锁状态 anyLock由客户端A持有队列中是客户端B、客户端C并且客户端B现在是排在头部 那么队列重拍就是队列中某个客户端长时间没有重新申请加锁,没有刷新分数,就会被队列中挤掉。 假设这个长时间没有加锁的客户端是B。 总结 …...
python 基础语法os模块
一、os模块 待总结 二、os.path模块 1.abspath()方法--获取绝对路径 abspathO)方法用于返回文件或者目录的绝对路径。 语法格式如下: os .path.abspath(path) 参数说明: path:表示要获取绝对路径的相对路径,可以是文件也可以是目录。 返回值:返回获取到的绝…...
图论------迪杰斯特拉(Dijkstra)算法求单源最短路径。
编程要求 在图的应用中,有一个很重要的需求:我们需要知道从某一个点开始,到其他所有点的最短路径。这其中,Dijkstra 算法是典型的最短路径算法。 本关的编程任务是补全右侧代码片段中 Begin 至 End 中间的代码,实现 …...
河工院首届工业设计大赛程序组(挑战赛)题解
更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 寻找ACMer 思想: 签到题按照题意遍历字符串,不断向后寻找包含 ACMer 完整字符串的数量即可 std标程: #include <iostream> #include <cstring> #include …...
文件上传漏洞(二,靶场搭建及漏洞利用)
前言: 本文基于github上的upload-labs,PHP study以及bp抓包软件进行操作。 一,靶场搭建。 靶场链接 1,下载zip文件到PHP study下的www文件夹内,并解压。 2,创建网站。 此处php版本应选择较老版本&…...
大厂面试题分享第二期
大厂面试题分享第二期 如果执行了一条命令,"select count(*)from…",使用哪个引擎更快,为什么?垃圾回收器 CMS 和 G1的区别介绍一下CMS和G1CMS(并发)垃圾收集器G1垃圾回收器 HTTPS和HTTP的区别主…...
zabbix安装
a.安装 Zabbix 仓库 # rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm # yum clean all b. 安装 Zabbix server、前端、agent # yum install zabbix-server-mysql zabbix-agent c. 安装Zabbix前端 启用红帽软件集合 # …...
SpringBoot集成日志框架
SpringBoot集成日志框架 Java生态体系日志框架介绍 简介 在Java生态体系中,围绕着日志,有很多成熟的解决方案。关于日志输出,主要有两类工具。 一类是日志框架(Log4j、Logback),主要用来进行日志的输出的…...
CSS笔记总结(Xmind格式):第三天
Xmind鸟瞰图: 简单文字总结: css知识: 边框线: 1.border-width:边框的粗细 2.border-style:边框线的样式(solid实线,double双实线,dotted点线,dashed虚线) 3.border-color:边框线的颜色 4.简写形式&a…...
WordPress原创插件:Keyword-ranking-seo 1.0 关键词排名插件 有利于seo
WordPress原创插件:Keyword-ranking-seo 1.0 关键词排名插件 有利于seo 当用户访问网站时,该链接会随机选择一个关键词,并使用选定的搜索引擎进行搜索。 插件下载链接 https://download.csdn.net/download/huayula/89632792...
Docker Swarm 管理
Docker Swarm 是 Docker 提供的一种用于管理容器集群的工具。一、Docker Swarm 的主要特点包括: 高可用性:可以自动检测和恢复故障节点,确保服务的持续可用性。 例如,当某个工作节点出现故障时,Swarm 会将其上的任务重…...
跨平台、多格式、云同步,Koodo Reader背后的技术亮点
前言 对于像我这样的书虫来说,能够找到一个既方便又舒适的阅读环境,简直就是人生中的一大幸事;今天,就让小江湖我带你走进一个不一样的阅读世界——Koodo Reade! 无论是在喧嚣的都市,还是在宁静的乡村&a…...
【Story】如何高效记录并整理编程学习笔记?
目录 一、为何笔记在编程学习中如此重要?1.1 知识的捕捉1.2 理解和消化1.3 知识的复习1.4 知识的分享 二、建立高效的笔记系统2.1 确定笔记的目标2.2 选择合适的工具2.3 笔记的结构化2.4 记录有效的内容2.5 定期回顾和更新 三、保持笔记条理性的技巧3.1 使用一致的格…...
jenkins 安装以及自动构建maven项目并且运行
在这里找到你对应jdk的版本的jenkins包 War Jenkins Packages 我这里用的使java8,所以下载 https://mirrors.jenkins.io/war-stable/2.60.1/jenkins.war 然后jenkins可以安装到centos系统 在本地windows系统运行命令行 scp C:\Users\98090\Downloads\jenkins.war root@192…...
Java虚拟机:虚拟机介绍
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 033 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
硬件面试经典 100 题(31~40 题)CRE4
31、多级放大电路的级间耦合方式有哪几种?哪种耦合方式的电路零点偏移最严重?哪种耦合方式可以实现阻抗变换? 有三种耦合方式:直接耦合、阻容耦合、变压器耦合。直接耦合的电路零点漂移最严重,变压器耦合的电路可以实现…...
ReactNative笔记(自用)
环境 ios更换gem镜像源: 查看当前源: gem sources -l 移除默认源: gem sources --remove https://rubygems.org/。添加新的源: 添加 Ruby China 的镜像源: gem source -a https://gems.ruby-china.com/或者添加其他镜像源。 清华大学的gem源: htt…...
嵌入式八股-面试30题(20240812)
TCP和UDP的区别是什么? **TCP(Transmission Control Protocol)**是面向连接的协议,提供可靠的、顺序的数据传输。它通过三次握手建立连接,并在数据传输过程中使用确认和重传机制来确保数据的正确性。TCP还支持流量控制和拥塞控制…...
单一职责原则(SRP)
目录 1、定义 2、优点 3、原则的重要性 4、 示例 5、注意事项 单一职责原则(Single Responsibility Principle, SRP)是面向对象设计中的一项重要原则,属于 SOLID 原则之一。它的核心思想是:一个类应该只有一个引起它变化的原因&am…...
骨传导耳机怎么选?分享五款资深用户都说好的骨传导耳机!
在追求健康生活的道路上,运动健身已成为一种时尚潮流,而音乐则是这场潮流中不可或缺的催化剂。然而,传统耳机在运动场景下的局限性日益凸显,难以满足运动者对自由与舒适的双重追求。正是基于这样的市场需求,骨传导耳机…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
