二、Redis分布式锁

news2025/1/13 10:59:34

一、什么是分布式锁

分布式锁是一种跨进程的,跨机器节点的一种互斥锁。保证在多个机器节点对共享资源访问的一个排他性。
分布式与单机情况下最大的不同在于分布式锁是多进程的而单机锁是单进程多线程的。

二、为什么需要分布式锁

与分布式锁相对就的是单机锁,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来互斥以保证共享变量的正确性,其使用范围是在同一个进程中。
如果换做是多个进程,需要同时操作一个共享资源,如何互斥呢?
现在的业务应用通常是微服务架构,这也意味着一个应用会部署多个进程,多个进程如果需要修改数据库中的同一行记录,为了避免操作乱序导致脏数据,此时就需要引入分布式锁了。
在这里插入图片描述
想要实现分布式锁,必须借助一个外部系统,所有进程都去这个系统上申请加锁。而这个外部系统,必须要实现互斥能力,即两个请求同时进来,只会给一个进程加锁成功,另一个失败。这个外部系统可以是数据库,也可以是Redis或Zookeeper,但为了追求性能,我们通常会选择使用Redis或Zookeeper来做。

三、Redis 分布式锁的一些问题

在这里插入图片描述

  • 非原子性:加锁和设置锁过期时间操作不能分开使用。可以使用Lua脚本解决异常情况下死锁的问题。
  • 忘了释放锁:忘记释放锁会导致死锁。
  • 释放了别人的锁:加锁时设置锁的唯一标识。UUID、GUID等。
  • 锁重入的问题:加锁后业务代码还没执行完,锁到期了就释放。写一个定时任务,定时执行续锁代码,就是在加锁的时候,另开一个线程调用续锁的代码。

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

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

相关文章

BHQ-1 amine,1308657-79-5,BHQ染料通过FRET和静态猝灭的组合工作

英文名称:BHQ-1 amine 中文名称:BHQ-1 氨基 CAS:1308657-79-5 外观:深紫色粉末 分子式:C25H29N7O3 分子量:475.55 结构式: 溶解性:溶于大部分有机溶剂,溶于水 储存…

luffy-(13)

内容概览 支付宝支付介绍支付宝支付二次封装订单相关表设计生成订单接口支付前端支付宝回调接口 支付宝支付介绍 """ 项目中有需要在线支付功能,可以使用支付宝支付(沙箱环境)微信支付(需要有备案过的域名)云闪付我们的项目以支付宝支付为例支付流程使用官方…

【动手学深度学习】关于“softmax回归的简单实现”报错的解决办法(含源代码)

目录:关于“softmax回归的简单实现”报错的解决办法一、前言二、实现步骤2.1 导包2.2 初始化模型参数2.3 重新审视Softmax的实现2.4 优化算法2.5 训练2.6 源代码三、问题出现四、问题的解决五、再跑代码六、改正后的函数源代码一、前言 在之前的学习中,…

题库系统(公众号免费调用)

题库系统(公众号免费调用) 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台&#xff0…

arthas 源码构建

arthas 源码构建 git下载代码 git clone https://github.com/alibaba/arthas.git 若github被墙,可以在gitee搜索下载 maven clean 可以在项目目录执行 mvn clean , ide可以执行界面执行 maven package 可以在项目目录执行mvn package 问题记录 ja…

四肽Suc-AAPD-对硝基苯胺,165174-58-3

粒酶B底物succ - aapd - pna。也被ICE劈开了。 编号: 177581中文名称: 四肽Suc-Ala-Ala-Pro-Asp-对硝基苯胺CAS号: 165174-58-3单字母: Suc-AAPD-pNA三字母: Suc-Ala-Ala-Pro-Asp-pNA氨基酸个数: 4分子式: C25H32O11N6平均分子量: 592.56精确分子量: 592.21等电点(PI): -pH7.0时…

新进场的獴哥健康、至真健康们,讲不出互联网医疗的新故事

文丨智能相对论 作者丨沈浪 曾几何时,互联网医疗风靡一时,现如今潮水退去,当市场回归理性,赛道竞争趋于同质化,一批互联网医疗企业正在试图通过讲好新故事,来拉开品牌与品牌之间的商业差距,寻…

ArcGIS Pro 转换Smart3D生成的倾斜3D模型数据osgb——创建集成网格场景图层包

最近在做Arcgis 批处理的一些工作,然后再学习Python的同时,偶然觉得arcgis Pro是个好东西呢?然后结合近期的Smart3D倾斜3D模型数据,是否可以在arcgis里查看呢?带着这样的疑问和好奇,开始了arcgis Pro的学习…

【408专项篇】C语言笔记-第四章(选择与循环)

第四章:选择、循环 第一节:选择if-else 1. 关系表达式与逻辑表达式 if-else的判断条件结果还是真与假,即1或0,一般是关系表达式或逻辑表达式。 算术运算符的优先级高于关系运算符,关系运算符的优先级高于逻辑与和逻…

Webpack 5 超详细解读(四)

31.proxy 代理设置 为什么开发阶段需要设置代理,在开发阶段,我们需要请求后端接口,但是一般后端接口地址和我们本地的不在同一个服务中提供,这时进行访问就会存在跨域的问题,所以我们需要对我们的请求进行转啊操作。模拟跨域请求代码如下: https://api.github.com/users…

高项 沟通管理论文

3个过程: 1,规划沟通管理:根据干系人的信息需要和要求及组织的可用资产情况,制订合适的项目沟通方式和计划的过程。 2,管理沟通:根据沟通管理计划,生成、收集、分发、储存、检索及最终处置项目信息的过程…

Spring boot 实践Rabbitmq消息防丢失

之前看很多网上大佬的防丢失的文章,文章中理论知识偏多,所以自己想着实践一下,实践过程中也踩了一些坑,因此写出了这篇文章。如果文章有误人子弟的地方,望在评论区指出。 导致消息出现丢失的原因 发送时失败&#xff…

295348-87-7,AF 594 Succinimidyl Ester可用于成像和流式细胞分析

理论分析: 中文名:AF 594活性酯 英文名:AF 594 Succinimidyl Ester,Alexa Fluor 594 NHS Ester,AF 594 NHS Ester CAS号:295348-87-7 化学式:C39H37N3O13S2 分子量:819.85 ex/em : 5…

招投标业务总结

最近接了一个招标投标的项目,开发完成后,整个招投标的流程也就理清楚了,简介一下业务过程。业务主流程可以分为3个阶段: 招标方建立招标项目发布招标公告投标人参与竞标招标方开标评选公示 系统可以划分为两套,一个是给招标方使…

若依框架解读(微服务版)——2.模块间的调用逻辑(ruoyi-api模块)(OpenFeign)

模块之间的关系 我们可以了解到一共有这么多服务,我们先启动这三个服务 其中rouyi–api模块是远程调用也就是提取出来的openfeign的接口 ruoyi–commom是通用工具模块 其他几个都是独立的服务 ruoyi-api模块 api模块当中有几个提取出来的OpenFeign的接口 分别为文件…

华为机试 - ABR 车路协同场景

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 数轴有两个点的序列 A{A1, A2, …, Am}和 B{B1, B2, ..., Bn}, Ai 和 Bj 均为正整数, A、 B 已经从小到大排好序, A、 B 均肯定不为空, 给定…

大数据培训课程Reduce Join案例实操

Reduce Join案例实操 1.需求 表4-4 订单数据表t_order idpidamount100101110020221003033100401410050251006036 表4-5 商品信息表t_product pidpname01小米02华为03格力将商品信息表中数据根据商品pid合并到订单数据表中。 表4-6 最终数据形式 idpnameamount…

2022我的前端面试总结

Webpack Proxy工作原理?为什么能解决跨域 1. 是什么 webpack proxy,即webpack提供的代理服务 基本行为就是接收客户端发送的请求后转发给其他服务器 其目的是为了便于开发者在开发模式下解决跨域问题(浏览器安全策略限制) 想…

盘点 | 跨平台桌面应用开发的5大主流框架

受益于开源技术的发展,以及响应快速开发的实际业务需求,跨平台开发不仅限于移动端跨平台,桌面端虽然在市场应用方面场景不像移动端那么丰富,但也有市场的需求。 相对于个人开发者而言,跨平台框架的使用,主…

Vue开发 提交后台,二维码,自定义

1. 修改title和图标 资源可以放在static下面,给一个小的: 直接再index里面改: 不生效,需要在 vue.config.js 中增加: module.exports {pwa: {iconPaths: {favicon32: logo.png,favicon16: logo.png,appleTouchIcon:…