【redis】redis分布式锁(一)手写分布式锁1.0~6.0

news2024/9/22 1:01:47

redis分布式锁(入门)


文章目录

  • redis分布式锁(入门)
  • 前言
  • 一、面试题
    • redis的用法:
    • CAP
  • 二、锁的种类
  • 三、一个靠谱分布式锁需要具备的条件和刚需
  • 四、`分布式锁`
  • 五、重点
  • 六、Base案例(boot+redis)
    • 1.0、最基础的锁demo 单机锁
    • 2.0、Nginx分布式微服务架构下的单机锁
      • 为什么在高并发下,不能用lock unlock这样的JVM层面上的单机锁
      • 如何解决?上redis分布式锁setnx
    • 3.0、redis分布式锁
      • 递归重试抢锁
      • 问题 递归容易导致堆栈溢出,以及if判断
      • 修改3.2 自旋代替递归、while代替if
      • 3.2的问题 没有给分布式锁加过期时间,一旦由于宕机等原因无法执行删除锁,就会阻塞其他正常使用这把锁的业务
      • 4.0版本
      • 4.2改进版 合为一行保证原子性 但是过期时间不够怎么办?
      • 5.0版 在finally的删除时,只能删除自己的
      • 到5.0为止的加锁的状态
      • lua脚本浅谈
      • 6.0 加入lua脚本
      • 到6.0为止的脑图
  • 七、手写分布式锁思路分析2023


前言

在这里插入图片描述


一、面试题

在这里插入图片描述

redis的用法:

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

CAP

C 一致性,单体redis
AP 高可用 集群redis

二、锁的种类

在这里插入图片描述


三、一个靠谱分布式锁需要具备的条件和刚需

在这里插入图片描述


四、分布式锁

在这里插入图片描述

在这里插入图片描述


五、重点

在这里插入图片描述


六、Base案例(boot+redis)

1.0、最基础的锁demo 单机锁

在这里插入图片描述

2.0、Nginx分布式微服务架构下的单机锁

在这里插入图片描述

为什么在高并发下,不能用lock unlock这样的JVM层面上的单机锁

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

如何解决?上redis分布式锁setnx

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

3.0、redis分布式锁

递归重试抢锁

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

问题 递归容易导致堆栈溢出,以及if判断

在这里插入图片描述

修改3.2 自旋代替递归、while代替if

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

3.2的问题 没有给分布式锁加过期时间,一旦由于宕机等原因无法执行删除锁,就会阻塞其他正常使用这把锁的业务

在这里插入图片描述

4.0版本

在这里插入图片描述

4.2改进版 合为一行保证原子性 但是过期时间不够怎么办?

在这里插入图片描述

5.0版 在finally的删除时,只能删除自己的

在这里插入图片描述

到5.0为止的加锁的状态

问题:最后的判断+del不是一行原子命令操作,需要lua脚本进行修改
在这里插入图片描述

lua脚本浅谈

hello lua:
在这里插入图片描述

三条命令一起执行:
在这里插入图片描述
通过占位符方式,输入参数执行:
在这里插入图片描述
官网建议的lua脚本原子删除
在这里插入图片描述
实操:
在这里插入图片描述
语法:
在这里插入图片描述

案例:
在这里插入图片描述

6.0 加入lua脚本

在这里插入图片描述

到6.0为止的脑图

6.0只能也对小厂的分布式锁,而到了大数据量的高并发则需要7.0 8.0的技能,放到下一篇写
在这里插入图片描述


七、手写分布式锁思路分析2023

放到下一篇写


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

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

相关文章

如何使用WordPress建立在线辅导网站(3个步骤)

在线辅导网站在过去几年中变得非常流行。随着越来越多的人转向远程工作和学习,这个行业已成为在家赚取额外收入的绝佳方式。 此外,提供在线指导可以帮助您成为所在领域的权威。 如果您想提供在线辅导,最好的方法通常是通过您自己的辅导网站…

并发编程中的三大问题剖析与解决

java并发编程中的三大问 可见性原因分析:解决: 原子性原因分析:解决: 有序性解决: 首先让我们来了解一下JUC JUC(Java Util Concurrent)是Java提供的一个并发编程工具包,它解决了在多…

【Linux】进程地址空间的初步理解

目录 程序地址空间空间布局图引入物理地址与虚拟地址的概念虚拟地址空间虚拟地址与物理地址是如何对应的?※父子进程独立性的理解(重点)fork两个返回值的原理地址空间为什么要存在?补充理解 程序地址空间空间布局图 (这…

IDEA 新版安装教程

目录 一、安装IDEA 1、双击安装,然后下一步 2、修改默认安装路径,自定义目录。(建议所有开发工具都放在同一个盘符) 3、改为自定义安装路径,下一步。(不用使用中文或空格) 4、创建桌面图标等 5、点击安装&#x…

02.DolphinScheduler数据源中心

文章目录 MySQLHIVE数据源使用HiveServer2使用 HiveServer2 HA Zookeeper Clickhouse MySQL 填写参数 数据源:选择 MYSQL数据源名称:输入数据源的名称描述:输入数据源的描述IP 主机名:输入连接 MySQL 的 IP端口:输入…

一维卷积与一维平均池化的时间复杂度

计算请参考这篇文章: (284条消息) 卷积神经网络的时间、空间复杂度以及数据流的变化_卷积的时间复杂度_Briwisdom的博客-CSDN博客 1. 时间复杂度 时间复杂度即模型的运行次数。 单个卷积层的时间复杂度:Time~O(M^2 * K^2 * Cin * Cout) //有的好奇小宝…

Spring(11. 循环依赖 - 周阳)学习笔记

上一篇 :10. 面试问题简析 文章目录 1. Spring AOP1.1. Aop 常用注解1.2 测试前的准备工作1.2.1 业务类1.2.2 切面类 1.3 Spring4 下的测试1.3.1 POM 文件1.3.2 创建测试类1.3.3 Aop 测试结果 1.4 Spring 5 下的测试1.4.1 POM 文件1.4.2 创建测试类1.4.3 Aop 测试结…

e签宝,「进化」在2023

精准布局生态化、统一化、智能化、信创化,辅以具体产品落地;加速产业、行业、企业、业务,“四业”互通互联,提高产业数字化渗透率。电子签“群战”时代,e签宝再次进化。 作者|斗斗 出品|产业家 “印章在谁手上&…

Camtasia 2023版强悍来袭,会哪些新功能呢?

Camtasia Studio 是一款专门录制屏幕动作的工具,它能在任何颜色模式下轻松地记录 屏幕动作,包括影像、音效、鼠标移动轨迹、解说声音等等,另外,它还具有即时播放和编 辑压缩的功能,可对视频片段进行剪接、添加转场效果…

享受简单上传体验:将Maven仓库迁移到GitHub

前言:我为什么放弃了Maven Central 之前我写过一篇《Android手把手,发布开源组件至 MavenCentral仓库》,文中详细介绍了如何发布组件到Maven Central中供所有开发者共用。但是最近使用下来,发现Sonatype JIRA 的Maven Center上传…

python接口自动化测试 requests库的基础使用

目录 简单介绍 Get请求 Post请求 其他类型请求 自定义headers和cookies SSL 证书验证 响应内容 获取header 获取cookies 简单介绍 requests库简单易用的HTTP库 Get请求 格式: requests.get(url) 注意:若需要传请求参数,可直接在 …

c++STL标准库排序函数std::sort使用

Qt系列文章目录 文章目录 Qt系列文章目录前言一、错误原因二、修改后的代码 前言 C sort()排序函数 C STL 标准库中的 sort() 函数,本质就是一个模板函数。正如表 1 中描述的,该函数专门用来对容器或普通数组中指定范围内的元素进行排序,排序…

【ML】windows 安装使用pytorch

使用pytorch需要python环境,建议是直接装anaconda ,IDE用visual studio anaconda安装 Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包 官网链接anaconda 本人下载…

(转)maven安装及配置(详细版)

1.下载: 方式一可以从官方下载,下载页面:http://maven.apache.org/download.cgi 方式二:或者题主提供的版本下载maven安装包 提取码:ysns 下载好后是一个压缩文件 2.安装: maven压缩包解压到一个没有中文&a…

AI 编程

GitHub Copilot(收费) 开发者:微软 openAI 2022年8月22日之后开始收费,10美元/月,100美元/年。 CodeGeeX(免费) CodeGeeX 可以根据自然语言注释描述(支持中英文注释&#xff09…

20.$refs

$refs是vue操作DOM用的,每一个vue组件实例上,都包含一个$refs对象,里面存储对应的DOM元素或组件的引用,默认情况下$refs对象为空 目录 1 $refs在哪 2 使用ref操作DOM 3 使用ref操作组件 3.1 使用组件方法 3.2 操作组件…

13 JS04——运算符

目标: 1、运算符 2、算数运算符 3、递增和递减运算符 4、比较运算符 5、逻辑运算符 6、赋值运算符 7、运算符优先级 一、运算符 1、概念 运算符(operator)也被称作操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 2…

解决java普通项目读取不到resouces目录下资源文件的办法

现象如下: 可以看到resources目录已经在idea中标记成了资源目录resources root,而且target/classes目录下也编译出了resources目录下的pci.properties文件,换句话说:java在编译时是读取到了resources下的文件的。 可是为什么new F…

App性能优化方案——布局层级太多怎么优化?

作者:小海编码日记 View整体布局是通过深度优先的方式来进行组织的,整体形似一颗树,所以优化布局层级主要通过三个方向来实施: 降低布局深度:使用merge标签或者布局层级优化等手段来减少View树的深度;布局…

代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II 、494. 目标和、474.一和零

文章目录 背包问题题型1049. 最后一块石头的重量 II494. 目标和474.一和零 背包问题题型 等和子集 —0-1背包能否装满最后一块石头—0-1背包尽量装满目标和—0-1背包装满,且有多少种装的方式(组合问题) 1049. 最后一块石头的重量 II 题目链…