【redis】redis红锁Redlock算法和底层源码分析

news2024/11/24 23:06:40

【redis】redis红锁Redlock算法和底层源码分析


文章目录

  • 【redis】redis红锁Redlock算法和底层源码分析
  • 前言
  • 一、当前代码为8.0版,接上一步
    • 分布式锁的主要考点
      • lock加锁关键逻辑
      • unlock解锁关键逻辑
  • 二、redis分布式锁-Redlock红锁
    • 主页说明:
    • 目前所写的分布式锁还有什么问题?
    • Redlock算法设计理念
      • 1、官网备注
    • 2、设计理念
    • 3、解决方案 2x+1台 x为可以容错台数
  • 三、使用Redisson进行编码改进 V9.0和V9.1
    • RedisConfig
    • InventoryController
    • BUG uuid+当前线程不正确
    • 解决 V9.1版本
  • 四、Redisson源码解析
    • 分析步骤
      • 1、守护线程“续命” redisson使用了“看门狗”定期检查
      • 2、获取锁之后,给锁加一个“看门狗” 它会自动执行定时任务,在锁还没有被释放且快要过期的时候会续期
      • 3、源码分析1-- 通过redisson新建的锁key,默认过期时间是30s
      • 4、源码分析2-- 加锁过程
      • 5、源码分析3-- 加锁逻辑
      • 6、源码分析4-- “看门狗”程序
        • “看门狗”自动延期机制
        • 自动续期的lua脚本
      • 7、解锁
  • 五、多机案例 是因为单机状态下遇到单点故障是致命的
    • 理论总结:
    • 代码参考:
      • 已弃用
      • 新的多重锁
    • 案例
      • CacheConfiguration 容器配置
      • controller
      • 测试
      • 结论


前言


一、当前代码为8.0版,接上一步

在这里插入图片描述

分布式锁的主要考点

在这里插入图片描述

lock加锁关键逻辑

在这里插入图片描述
在这里插入图片描述

unlock解锁关键逻辑

在这里插入图片描述

二、redis分布式锁-Redlock红锁

在这里插入图片描述

主页说明:

在这里插入图片描述

目前所写的分布式锁还有什么问题?

一台redis组成的分布式锁有一个致命的缺陷,一旦这台redis宕机,就无法操作分布式锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Redlock算法设计理念

1、官网备注

在这里插入图片描述
在这里插入图片描述

2、设计理念

在这里插入图片描述在这里插入图片描述

3、解决方案 2x+1台 x为可以容错台数

在这里插入图片描述


三、使用Redisson进行编码改进 V9.0和V9.1

在这里插入图片描述

RedisConfig

在这里插入图片描述

InventoryController

在这里插入图片描述

BUG uuid+当前线程不正确

在这里插入图片描述

解决 V9.1版本

只有正在锁定状态,且锁还是自己这个uuid+线程id才能解锁
在这里插入图片描述


四、Redisson源码解析

在这里插入图片描述

分析步骤

在这里插入图片描述

1、守护线程“续命” redisson使用了“看门狗”定期检查

在这里插入图片描述

2、获取锁之后,给锁加一个“看门狗” 它会自动执行定时任务,在锁还没有被释放且快要过期的时候会续期

在这里插入图片描述

3、源码分析1-- 通过redisson新建的锁key,默认过期时间是30s

在这里插入图片描述

4、源码分析2-- 加锁过程

在这里插入图片描述

5、源码分析3-- 加锁逻辑

在这里插入图片描述
流程分析
在这里插入图片描述

6、源码分析4-- “看门狗”程序

在这里插入图片描述

“看门狗”自动延期机制

在这里插入图片描述

自动续期的lua脚本

在这里插入图片描述

7、解锁

在这里插入图片描述


五、多机案例 是因为单机状态下遇到单点故障是致命的

在这里插入图片描述

理论总结:

在这里插入图片描述

代码参考:

已弃用

在这里插入图片描述

在这里插入图片描述

新的多重锁

在这里插入图片描述

案例

在这里插入图片描述

CacheConfiguration 容器配置

在这里插入图片描述
在这里插入图片描述

controller

在这里插入图片描述

测试

在其中一台宕机了,其他也还会继续工作,说明多重锁在高可用方面是优于单机分布式锁的
注:阳哥说平时单机性能就够用了

结论

底层是hash类型 后边是可重入次数 也是需要解锁的次数
在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++自学笔记(陆续更新)

本笔记为从菜鸟教程边学边记录的笔记---》C 教程 | 菜鸟教程 面向对象程序设计 封装(Encapsulation):封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。…

C语言入门教程||C语言 头文件||C语言 强制类型转换

C语言 头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它…

USART串口接收

文章目录 运行环境:1.1 串口接收代码分析1)开启接收中断和空闲中断2)接收存储变量声明和定义3)中断处理函数 2.1实验效果 运行环境: ubuntu18.04.melodic 宏基暗影骑士笔记本 stm32f427IIH6 stlink 9-24v可调电源 usb转串口 杜邦线转4pin 1.1 串口接收…

Python | 人脸识别+活体检测+背景模糊+关键点检测系统(Face_Recognition+dlib+OpenCV+MediaPipe+PyQt)

本博客为人脸识别系统项目简介 项目GitHub完整源代码地址: 一、运行环境 本系统能够运行在基于PC操作系统Windows环境下,要求Windows操作系统安装Python 3.9 及以上环境,且已安装MySQL数据库。 Python3.9 安装:Python 3.9安装教程…

【UE】坦克开火

1. 添加开火的操作映射 2. 创建一个actor蓝图类,添加一个静态网格体组件 添加发射物移动组件 设置初始速度和最大速度 发射物重力范围设为0.05 添加音频组件 设置音效 3. 打开炮管的静态网格体 在插槽管理器中创建插槽 将创建的插槽放到炮口位置 4. 打开“BP_BaseT…

B-Tree (多路查找树)分析-20230503

B-Tree (多路查找树)学习-20230503 前言 B-树是一类多路查询树,它主要用于文件系统和某些数据库的索引,如果采用二叉平衡树访问文件里面的数据,最坏情况下,磁头可能需要进行O(h)次对磁盘的读写,其中h为树的高度&…

探究Android插件化开发的新思路——Shadow插件化框架

Shadow插件化框架是什么? Shadow是一种Android App的插件化框架,它利用类似于ClassLoader的机制来实现应用程序中的模块化,并让这些模块可以在运行时灵活地进行加载和卸载。Shadow框架主张将一个大型的Android App拆分成多个小模块&#xff…

提升V-Ray渲染效率的五个实用技巧!

Chaos V-Ray是一个 3D渲染插件,可用于所有主要的 3D设计和 CAD程序。V-Ray可以和 3ds Max、Cinema 4D、Houdini、Maya、Nuke、Revit、Rhino、SketchUp和 Unreal无缝协作。艺术家和设计师也可以通过使用 V-Ray的实时光线来追踪探索和分享自己的项目,并渲染…

SpringBoot调取OpenAi接口实现ChatGpt功能

很高兴和大家分享我实现的一个小项目,利用 Spring Boot 实现了一个 ChatGpt 对话系统。在本文中,我将详细介绍这个项目的实现步骤,以及代码实现。 什么是 ChatGpt ChatGpt 是一种基于 GPT 技术的对话系统,能够生成连贯、流畅、…

V-Ray怎么快速渲染_渲染加速小技巧

很多小伙伴在使用V-Ray渲染器的时候都想要更加快速的出图,今天Renderbus瑞云渲染就给大家分享一下V-Ray渲染加速的小技巧。 在了解渲染加速技巧之前,我们首先要了解渲染制作主要受两个因素影响——图像质量和渲染时间,高图像质量是以长渲染时…

k8s集群搭建(3主2从)

目录 kubeadm 和二进制安装 k8s 适用场景分析 多 master 节点高可用架构图 集群环境准备 部署过程 修改主机内核参数(所有节点) 配置阿里云的repo源(所有节点) 配置国内安装 docker 和 containerd 的阿里云的 repo 源 配置…

day11 TCP连接管理与UDP协议

目录 ​编辑 连接的建立——”三次握手” 连接的释放——“四次挥手” 保活计时器 用户数据报协议 UDP​编辑 连接的建立——”三次握手” TCP 建立连接的过程叫做握手。 采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接…

SPSS如何进行多重响应分析之案例实训?

文章目录 0.引言1.多重响应变量频率分析2.对多重响应变量集进行交叉表分析3.使用表过程研究多重响应变量集 0.引言 因科研等多场景需要进行绘图处理,笔者对SPSS进行了学习,本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记…

对模式的迷信,大部分是幻觉和妄想

对模式的迷信,大部分是幻觉和妄想 往往有严重的投机心理 郑翔洲,所谓模式设计专家 还是有点虚,仅供一点参考 说苹果、说华为、说小米这些总结都是事后诸葛亮 趣讲大白话:商业模式被妖魔化 【趣讲信息科技153期】 ****************…

从零构建等保三级|安全狗一站式等保解决方案助用户快速过等保

一 政策法规下的等级保护 “没有网络安全就没有国家安全,没有信息化就没有现代化。” 在2017年6月1日,我国开始全面实行《网络安全法》,其中第二十一条规定了“国家实行网络安全等级保护制度”。此外,在2019年5月13日&#xff…

数据开发常见问题

目录 环境变量过多或者参数值过长时,为什么提交作业失败? 为什么Shell作业状态和相关的YARN Application状态不一致? 创建作业和执行计划的区别是什么? 如何查看作业运行记录? 如何在OSS上查看日志? 读…

阿里云服务器vCPU和CPU有什么区别?

阿里云服务器vCPU和CPU是什么意思?CPU和vCPU有什么区别?一台云服务器ECS实例的CPU选项由CPU物理核心数和每核线程数决定,CPU是中央处理器,一个CPU可以包含若干个物理核,通过超线程HT(Hyper-Threading&#…

不坑盒子 (Office、WPS插件)高效办公,让你提前进入摸鱼状态。

不坑盒子简介 很多朋友在工作过程中需要对Word文档进行编辑处理,如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件,是一个非常好用的办公工具,拥有近百项功能的Word,wps插件,支持Office 2010以上的版本&a…

Python入门(二)变量和简单数据类型(一)

变量和简单数据类型(一) 1.变量1.1 变量的命名和使用1.2 变量其实是标签 2.字符串2.1 使用方法修改字符串的大小写2.2 在字符串中使用变量 2.3 使用制表符或换行符来添加空白2.3 使用字符串时应该避免的错误 作者:Xiou 1.变量 下面来尝试在…

System verilog【1】基础语法和数据类型+容器+结构体+不可综合的数据类型

前言 某种事情是不可能重新复原的,只能向前推进……不管什么地方,两人能去哪里就去哪里好了——《国境以南太阳以西》 \;\\\;\\\; 目录 前言内建数据类型reg和wire和logiclogic和bit四值和二值类型位宽类型转换隐式转换 常见数据类型定宽数组动态数组pa…