分布式锁(Redission)
分布式锁:
使用场景:
通常对于一些使用率高的服务,我们会进行多次部署,可能会部署在不同的服务器上,但是他们获取和操作的数据仍然是同一份。为了保证服务的强一致性,我们需要对线程进行加锁,但是因为我们部署在了不同的服务器上,而互斥锁只针对加锁的那台服务器,不会去限制别的服务器,所以是不能实现强一致性的要求的。(比如在8080的线程1获取完库存后,8081的线程1也进行了获取,此时8080的线程1对内存进行了扣除,按理来说已经没有库存了,但是8081的线程1获取的时候还是有的,还会继续扣除,这样就会出现问题)

这个时候我们就要使用分布式锁来解决问题了,分布式锁可以实现不同服务器上的监控,只要有一个线程获取了锁,其他的线程(包括其他服务器上的线程)都无法继续获取锁。

那么分布式锁怎么使用呢?通常我们使用redis的时候,会通过redis中的redission来实现分布式锁。
Redission:

redission实现分布式锁有三个重点:
watch dog:
我们知道,获取了锁之后如果不去释放锁,那么别的线程就都无法去使用相关的资源,那么如果加锁的线程因为某些原因终止了,没有去执行释放锁的命令怎么办呢?也许我们可以去设置锁的时间,到时间了就立马释放锁?这种方法理论可行,但是实际上每个线程需要花费的时间是无法确定的,如果时间少了加锁就没有意义,时间久了又占用资源。如果有一个旁观者,它可以告诉我们线程是否结束,如果结束了就释放锁,如果没结束就给锁加时就好了。watch dog就可以实现这个功能。
在某个线程加锁的同时,会生成一个新的线程来启动watch dog监控,如果加锁线程没有结束watch dog会每隔(releaseTime/3)的时间做一次续期(releaseTime默认30s),如果线程结束了,我们可以发送释放锁的指令来停止watch dog续期锁。
下面是redission的代码实现,这里有一个要注意的地方,如果我们在trylock的时候设置了锁自动释放时间,redission就会认为我们可以自己控制什么时候释放锁,就不会使用watch dog来帮助我们。

重试机制:
当有线程获取锁后,另外的线程会尝试循环获取锁,不过这个次数不是无限制的,存在一个阈值。
LUA脚本:
加锁、设置过期时间等操作都是基于lua脚本完成,可以保证代码的原子性。
除此之外,redission生成的分布式锁还有一些特点
可重录:

什么意思呢?就是在同一个线程中可以多次进行加锁(同一把锁),而每加一把锁,锁的value +1,每释放一把锁,锁的value -1。举个例子,在add1方法中,我们拿了一个“heimalock”锁,此时这个lock的记录如下

因为生成了锁,value为1,在add1方法中我们又调用了add2方法,add2方法同样也拿了一个“heimalock”锁,此时并不会创建新的锁,而是将value +1变成了2,此时这个lock的记录如下

释放锁其实就是value -1,不再过多赘述。
主从一致性:
redission不能实现,但是redission提供了redlock(红锁)来实现,只不过效率太低,如果要实现主从一致性,建议使用zookeeper
相关文章:
分布式锁(Redission)
分布式锁: 使用场景: 通常对于一些使用率高的服务,我们会进行多次部署,可能会部署在不同的服务器上,但是他们获取和操作的数据仍然是同一份。为了保证服务的强一致性,我们需要对线程进行加锁,…...
【ARMv8/v9 GIC 系列 3 -- GIC 的 类型寄存器 GICD_TYPER】
文章目录 GIC 类型寄存器 GICD_TYPERESPI_Range, 位[31:27]RSS, 位[26]No1N, 位[25]A3V, 位[24]IDBits, 位[23:19]DVIS, 位[18]LPIs, 位[17]MBIS, 位[16]NUM_LPIs, 位[15:11]SecurityExtn, 位[10]NMI, 位[9]ESPI, 位[8]CPUNumber, 位[7:5]ITLinesNumber, 位[4:0]GIC 类型寄存器…...
MATLAB算法实战应用案例精讲-【数模应用】线性判别分析(附MATLAB、python和R语言代码实现)
目录 前言 算法原理 什么是判别分析 线性判别分析(LDA) 数学模型 二分类 多分类LDA 编辑 算法思想: 费歇(FISHER)判别思想 贝叶斯(BAYES)判别思想 LDA算法流程 LDA与PCA对比 SPSSPRO 1、作用 2、输入输出描述 3、案例示例 4、案例数据 5、案例操作 …...
打造智能家居:用ESP32轻松实现无线控制与环境监测
ESP32是一款集成了Wi-Fi和蓝牙功能的微控制器,广泛应用于物联网项目。它由Espressif Systems公司开发,具有强大的处理能力和丰富的外设接口。下面我们将详细介绍ESP32的基础功能和引脚功能,并通过具体的实例项目展示其应用。 主要功能 双核处…...
大型Web应用的模块化与组织实践:Flask Blueprints深入解析
目录 一、引言 二、Flask Blueprints概述 三、Flask Blueprints的使用 创建Blueprint对象 定义路由和视图函数 注册Blueprint 使用Blueprints组织代码 四、案例分析 创建模块目录结构 创建Blueprint对象 注册Blueprint 五、代码示例与最佳实践 1. 代码示例 …...
AI 智算产业发展现状和预测报告
一、引言 2023年,随着ChatGPT的横空出世,人工智能领域迎来了新的浪潮。我们正站在一个技术革命的前沿,迈入一个全新的智算时代。在这个时代,更高效的计算、更智能的推理、更敏捷的内容生成,正在重新定义着生产力和生产组织形态。2023年《数字中国建设整体布局规划》的发布…...
【软件工具】Xshell安装教程
1、安装软件:Xshell-5.0.1337p.exe,双击安装即可,可以选择安装到D盘; 2、在D盘安装完成后,将文件nslicense.dll拷贝到对应的安装目录下; 3、打开快捷方式即可打开应用软件。...
git如何切换到tag分支
项目场景: 当我们需要回退到某个tag分支。 问题描述 通过git命令 git checkout tag_name 执行这个命令后,会提示你当前处于一个“detached HEAD”的状态。 原因分析: 这是因为tag只是一个快照,是不能更改代码的。 解决方案&am…...
【启明智显产品介绍】Model3C工业级HMI芯片详解专题(三)通信接口
Model3C 是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU, 集成了内置以太网控制器,配备2路CAN、4路UART、5组GPIO、2路SPI等多种通信接口,能够轻松与各种显示设备连接,实现快速数据传输和稳定通信,可以与各…...
Mysql实战中的一些小tips
1. 问题:使用select进行查表,出现连接事务一直连接,导致锁表,没办法对表格进行修改操作。 解决办法: # 在建立conn连接时,设置commit如下:self.dbconn MySQLdb.connect(hostsql_conf.MYSQL_HO…...
【Linux】使用信号进行进程间通信
🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 实现原理&a…...
电脑实用技巧1
以下给大家分享了一些电脑使用小技巧,赶快点赞、收藏、分享! 分屏操作:按住Win键,配合左右方向键可以实现分屏操作,适合一边办公一边娱乐的需求。快速打开任务管理器:按住CtrlShiftEsc可以快速打开任务管理…...
【D3.js in Action 3 精译】1.1.3 D3.js 的工作原理
译者注 上一节我们探讨了 D3.js 的适用场景——需要高度定制化、可以尽情释放想象力的复杂图表。这一节我们再跟随作者的视角,看看 D3.js 的工作原理究竟是怎样的。 1.1.3 D3.js 的工作原理 您可能已经体验过 D3 并且发现它不太容易上手。这也许是因为您把它当成了…...
面试-java多线程与并发
1.如何实现处理线程的返回值 (1)主线程等待法 主线程等待法:程序执行时,没有等到value值赋予完成,就直接在主函数 中执行打印value的值。 缺点:需要自己去实现循环等待的逻辑。若需要等待的变量变多,需要等待的时间可能…...
前端学习-day10
文章目录 01-体验平面转换02-平移效果03-绝对定位元素居中04-案例-双开门06-转换旋转中心点07-案例-时钟-转换原点08-平面转换-多重转换09-缩放效果10-案例-按钮缩放11-倾斜效果12-渐变-线性13-案例-产品展示14-渐变-径向15-综合案例-喜马拉雅 01-体验平面转换 <!DOCTYPE h…...
深入理解桥接模式(Bridge Pattern)及其实际应用
引言 在软件开发过程中,设计模式为我们提供了优雅且高效的解决方案,以应对常见的设计问题。桥接模式(Bridge Pattern)作为一种结构型设计模式,旨在将抽象部分与其实现部分分离,使它们可以独立变化…...
Springboot + Mybatis 实现sql打印
参照这个视频:https://www.bilibili.com/video/BV1MS411N7mn/?vd_source90ebeef3261cec486646b6583e9f45f5 实现mybatis对外暴露的接口Interceptor 使用Intercepts接口,这里的写法参照mybatis-plus中的拦截器写法 Intercepts({Signature(type Executor.class, m…...
Cesium默认bing地图数据,还支持哪些地图的数据源呢?
传统的前端开发增长乏力了,新兴的web3D方向前端开发需求旺盛,这一块在国外很成熟,在国内兴起不久, 甚至很多前端老铁都没听过,没见过,没有意识到,前端除了框架、vue、uniapp这些烂大街的&#x…...
高效、智能、安全:小型机房EasyCVR+AI视频综合监控解决方案
一、背景需求分析 随着信息技术的迅猛发展,小型机房在企事业单位中扮演着越来越重要的角色。为了确保机房的安全稳定运行,远程监控成为了必不可少的手段。 二、视频监控 视频监控是机房远程监控的重要组成部分。通过安装IP摄像机及部署视频监控系统Ea…...
数据分析的Excel基础操作
数据透视表 1.先备份,创建原数据副本,将副本sheet隐藏掉。 2.看数据的量级,总行和总列。 3.浏览数据的字段和数值,大致看一下有无异常 4.找到插入->数据透视表,不选择默认点击确认创建,随意点击数据透视…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
