面试总结-Redis篇章(八)——Redis分布式锁
JAVA 面试总结-Redis分布式锁
- 模拟抢券场景
- 通过下面方法添加Synchronized锁来防止上述情况,
- 如果上面是单体服务没有问题,但是如果项目是集群部署,会出现下面的问题,因为Synchronized是属于本地的锁
- 端口8080和8081同时访问,那么两个线程会同时加锁
- 这时候我们需要用分布式锁
- Redis 分布式锁实现原理
- Redis实现分布式锁如何合理的控制锁的有效时长?
- 1.根据业务执行时间预估,2.给锁续期,但是第一种根据业务执行的时间预估依然可能会出现问题,所以我们采用第二种方案给锁续期,但是我们要自己再开一个线程一直关注这个锁吗?Redis 分布式锁就可以实现
- 加锁,设置过期时间等操作都是基于lua脚本完成
- 主从一致性
- 红锁

模拟抢券场景



通过下面方法添加Synchronized锁来防止上述情况,

如果上面是单体服务没有问题,但是如果项目是集群部署,会出现下面的问题,因为Synchronized是属于本地的锁


端口8080和8081同时访问,那么两个线程会同时加锁
这时候我们需要用分布式锁

8080端口在进行线程1的时候,进行加锁,此时8081的进行访问的时候获取互斥锁失败,可以保证数据一致
Redis 分布式锁实现原理

为什么要设置过期时间?如果不设置过期时间的话,有可能导致死锁的问题。
Redis实现分布式锁如何合理的控制锁的有效时长?
1.根据业务执行时间预估,2.给锁续期,但是第一种根据业务执行的时间预估依然可能会出现问题,所以我们采用第二种方案给锁续期,但是我们要自己再开一个线程一直关注这个锁吗?Redis 分布式锁就可以实现

下面这个线程加锁成功的话,跟上面的流程是一样的,如果加锁不成功,就会循环,不断尝试获取锁,但是也不会一直循环,有设置阈值,循环次数达到阈值就会停止
具体代码:

加锁,设置过期时间等操作都是基于lua脚本完成

add1 方法加锁 ,Value.value = 1, 之后调用add2 方法加锁,Value.value = 2, add2 释放锁 Value.value-1变成1 ,之后add1 释放锁 Value.value-1变成0
只有同一个线程才会重入
主从一致性

假如现在在写入数据到主节点,这时候主节点宕机了,会有一个从节点变成主节点,当有请求来了,继续写入数据,也会尝试获取锁,因为之前的数据没同步过来,这时候就会造成两个线程同时持有同一把锁,但是这样就没有互斥性了,业务还在执行就可能会产生脏数据,因此在Redis中还提供了另外一种锁——红锁
红锁

其中 n 代表redis中节点的数量,创建锁的个数要大于等于节点的一半才行,来解决主从不一致的问题,但是这种方法实现复杂,性能查并且运维繁琐。
Redis 的思想是AP思想,保证数据最终一致,但是如果必须保证完全实时一致,就需要用CP思想,用zookeeper


相关文章:
面试总结-Redis篇章(八)——Redis分布式锁
JAVA 面试总结-Redis分布式锁 模拟抢券场景通过下面方法添加Synchronized锁来防止上述情况,如果上面是单体服务没有问题,但是如果项目是集群部署,会出现下面的问题,因为Synchronized是属于本地的锁端口8080和8081同时访问…...
压力测试-商场项目
1.压力测试 压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预…...
IDEA中文UT方法执行报错问题、wps默认保存格式
wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后,编码格式从UTF-8-bom变成UTF-8(notepad可以查看); 2、IDEA中文UT执行报错: 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…...
Vue如何实现编程式导航声明方法,前进和后退导航
编程式导航声明方法,前进和后退导航 在router中设置路由导航跳转函数 只要发生跳转 导航的声明函数 访问控制系统如何形成 就这三种 导航守卫的案例,写一个Main.Vue 和login .Vue 后台主页 如果想要展示后台主页,就用这种方法 想实现路由跳转…...
torch.load 报错 ModuleNotFoundError 或 AttributeError
Python 3.11.3 (main, Apr 7 2023, 19:25:52) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin Type "help", "copyright", "credits" or "license" for more information.正常情况下,我们会使用 torch.save 保存模型的 …...
前端,js , Error in created hook: TypeError ,有bug了
怎么兄弟,遇到bug了???你开心吗,哈哈哈哈...
百度文心千帆大模型平台:企业级大模型服务的新航标
随着人工智能和大数据的快速发展,大模型平台正越来越受到各大企业和个人开发者的青睐。本文将以百度最新推出的文心千帆大模型平台为例,深入分析其在国家战略布局,经济发展趋势,市场变化动向和技术研发周期等方面的影响和应用。同…...
uniApp低功耗蓝牙一键开门、多对多查找、数组匹配数组、开锁
文章目录 htmlJavaScript坑 html <view class"m_t_36"><view class"w_50_ h_100 lh_100 m_l_a m_r_a bc_409eff radius_10 color_fff ta_c" click"openBluetoothAdapter()">一键开门</view> </view>JavaScript export…...
类和对象|六个默认成员函数|const成员函数|运算符重载
文章目录 默认成员构造函数1. 构造函数1.1 概念1.2 特性 2. 析构函数2.1 概念2.2 特性 3. 拷贝构造函数3.1 概念3.2 特性 4. 运算符重载4.1 赋值重载4.2 自增自减重载4.3 取地址操作符重载 5. const成员函数6. 取地址重载 默认成员构造函数 上一节我们说过,空类的大…...
从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理
ExceptionHandler的作用 ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,…...
04mysql查询语句之查询与分页02
1. 所有有门派的人员信息 ( A、B两表共有) INSERT INTO t_dept(deptName,address) VALUES(华山,华山); INSERT INTO t_dept(deptName,address) VALUES(丐帮,洛阳); INSERT INTO t_dept(deptName,address) VALUES(峨眉,峨眉山); INSERT INTO t_dept(deptN…...
原型模式——对象的克隆
1、简介 1.1、概述 可以通过一个原型对象克隆出多个一模一样的对象,该模式被称为原型模式。 在使用原型模式时,需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。 1.2、定义 原型模式(Prototype Patt…...
[SQL挖掘机] - 多表连接
介绍: 在 SQL 中,多表连接是指将多个表根据某些条件进行联接,以获取相关联的数据。这允许我们跨多个表进行查询,并且根据表之间的关系获取所需的结果。 作用: 当在多个表中存储相关数据时,使用多表连接可以将这些表组合起来以获…...
Day 14 C++ 对象的初始化和清理
目录 为什么要进行对象的初始化和清理 构造函数和析构函数 构造函数(Constructor) 构造函数语法 调用时机 构造函数的调用方式 括号法 显式法 隐式转换法 构造函数分类 分类方式 按参数分为有参构造和无参构造 按类型分为普通构造和拷贝构造…...
Delphi7最佳登录窗体设计
Delphi7我们这里用登录窗体来做演示。输入正确用户名和密码后,登录窗体释放,显示主窗体。 方法/步骤 1.打开Delphi7集成开发环境,在默认工程的Form1窗体放置一个Label1控件,拖动控件边界调整大小,并将Object Inspect…...
动脑学院Jetpack Compose学习笔记
最近b站学习了一下Compose相关内容,整理了相关笔记,仅供大家参考。 资源链接如下,象征性收取1个积分 https://download.csdn.net/download/juliantem/88125198...
Qt中线程的使用
Qt中线程的使用 在qt中线程的使用有两种方式,第一种就是创建一个类继承QObject类,之后使用moveToThread函数将线程添加到类中。另一种就是创建一个类继承QThread类,在类中实现run函数。 第一种方式: 1、首先创建一个自定义的类…...
基于YOLOv8开发构建蝴蝶目标检测识别系统
在前面的一篇博文中已经很详细地描述了如何基于YOLOv8开发构建自己的个性化目标检测模型,感兴趣的话可以看下: 《基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】》 本文的主要目的就是基于YOLOv8来开发构建细粒度的蝴蝶目标…...
【已解决】电脑连上网线但无法上网
文章目录 案例情况解决方案必要的解决方法简要概括详细步骤1、打开控制面板2、打开更改适配器设置3、 找Internet协议版本44、修改配置 可能有用的解决方法 问题解决原理Internet 协议版本 4(TCP/IPv4)确保IP地址和DNS服务器设置为自动获取 案例情况 网…...
Linux 学习记录57(ARM篇)
Linux 学习记录57(ARM篇) 本文目录 Linux 学习记录57(ARM篇)一、外部中断1. 概念2. 流程图框 二、相关寄存器1. GIC CPU Interface (GICC)2. GIC distributor (GICD)3. EXTI registers 三、EXTI 寄存器1. 概述2. 内部框图3. 寄存器功能描述4. EXTI选择框图5. EXTI_EXTICR1 &…...
编写团队创意迭代记录程序,记录创意修改优化过程,形成完整创新迭代档案。
一、实际应用场景描述在真实团队创新过程中,常见如下场景:- 头脑风暴产生大量创意- 评审后不断修改、合并、推翻- 半年后再回顾,“谁提的?为什么改?最初长什么样?”已经模糊- 新成员加入,无法理…...
公平AI研究的组织协调困境:从技术理想走向工程实践
1. 公平AI研究的十字路口:当技术理想遭遇组织现实如果你最近几年关注过人工智能的新闻,大概率会看到这样的标题:“某招聘算法被曝歧视女性”、“某医疗AI系统对少数族裔诊断准确率显著偏低”。这些并非科幻小说的情节,而是算法偏见…...
终极指南:用BG3 Mod Manager轻松管理《博德之门3》模组
终极指南:用BG3 Mod Manager轻松管理《博德之门3》模组 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否曾经因为《博德之门3》的模…...
别再重启了!Win11开机卡死/间歇性卡顿的终极排查与修复指南(附免费工具)
Win11系统卡顿终极自救指南:从根源排查到永久修复 每次开机都像在玩俄罗斯轮盘赌——今天Win11会卡死吗?鼠标指针变成沙漏图标的那一刻,血压瞬间飙升的场景想必每个Win11用户都经历过。不同于网上那些"重启试试"的敷衍建议…...
5分钟掌握暗黑破坏神2存档编辑:免费开源工具完全攻略
5分钟掌握暗黑破坏神2存档编辑:免费开源工具完全攻略 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑2刷装备而烦恼?想快速体验不同build却不想重复练级?d2s-editor这款暗黑破坏神2…...
ShopXO任意文件读取漏洞CNVD-2021-15822深度解析
1. 这不是“读文件”,而是绕过权限边界的系统级失守 ShopXO 是国内中小电商项目中出镜率极高的开源系统,轻量、模板丰富、部署快,很多本地生活类小程序后台、县域特产商城、校园二手平台都用它打底。但就在2021年CNVD公布的编号 CNVD-2021-15…...
NoFences:开源免费的Windows桌面管理终极解决方案
NoFences:开源免费的Windows桌面管理终极解决方案 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 厌倦了杂乱无章的桌面图标?不想为专业桌面管理软件付…...
WebPlotDigitizer完整指南:如何从图表图像中快速提取精准数据
WebPlotDigitizer完整指南:如何从图表图像中快速提取精准数据 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面…...
免费快速搞定CTF MISC难题:5个PuzzleSolver实战技巧让你秒变大神
免费快速搞定CTF MISC难题:5个PuzzleSolver实战技巧让你秒变大神 【免费下载链接】PuzzleSolver 一款针对CTF竞赛MISC的工具~ 项目地址: https://gitcode.com/gh_mirrors/pu/PuzzleSolver 你是不是每次参加CTF比赛,看到MISC题目就头疼?…...
5分钟终极指南:如何用KMS_VL_ALL_AIO一键搞定Windows和Office激活难题
5分钟终极指南:如何用KMS_VL_ALL_AIO一键搞定Windows和Office激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活烦恼吗?每次重装系统后都要到处寻…...
