【分布式】分布式锁的业务应用场景

梳理了分布式锁的两种常用的实现方式,接下来梳理一下日常开发中会应用分布式锁的业务场景
实现分布式锁的两种方式:
【分布式锁】Redission实现分布式锁
【分布式锁】Redis实现分布式锁
分布式锁在分布式系统中扮演着至关重要的角色,用于解决在多个服务或进程间对共享资源的安全访问问题。以下是分布式锁使用的一些具体业务场景:

1. 库存扣减
在电商或零售业务中,多个用户可能同时尝试购买同一商品。为了防止库存超卖,需要在扣减库存时加锁。分布式锁可以确保在同一时间内只有一个服务实例能够执行库存扣减操作。

因为小T刚接手项目,正在吭哧吭哧对熟悉着代码、部署架构。在看代码过程中发现,下单这块代码可能会出现问题,这可是分布式部署的,如果多个用户同时购买同一个商品,就可能导致商品出现 库存超卖 (数据不一致) 现象,对于这种情况代码中并没有做任何控制。

原来一问才知道,以前他们都是售卖的虚拟商品,没啥库存一说,所以当时没有考虑那么多…

这次不一样啊,这次是售卖的实体商品,那就有库存这么一说了,起码要保证不能超过库存设定的数量吧。

小T大眼对着屏幕,屏住呼吸,还好提前发现了这个问题,赶紧想办法修复,不赚钱还赔钱,老板不得疯了,还想不想干了~

2. 订单处理
在订单处理系统中,可能需要对订单状态进行更新,如从“待支付”变为“已支付”。如果多个服务实例同时处理同一个订单,可能会导致订单状态不一致。使用分布式锁可以确保在同一时间内只有一个服务实例能够修改订单状态。

小T下面的一位兄弟正在压测,发现个小问题,因为在终端设备上跟鹅厂有紧密合作,调用他们的接口时需要获取到access_token,但是这个access_token过期时间是2小时,过期后需要重新获取。

压测时发现当到达过期时间时,日志看刷出来好几个不一样的access_token,因为这个服务也是分布式部署的,多个节点同时发起了第三方接口请求导致。

虽然以最后一次获取的access_token为准,也没什么不良副作用,但是会导致多次不必要的对第三方接口的调用,也会短时间内造成access_token的 重复无效获取(重复工作)。

3. 分布式事务
在需要跨多个服务或数据库进行事务操作的场景中,分布式锁可以用来协调事务的提交或回滚。例如,在转账操作中,需要确保源账户扣款和目标账户加款两个操作要么都成功,要么都失败。分布式锁可以帮助实现这种跨服务的事务一致性。

4. 缓存一致性
在分布式缓存系统中,多个服务实例可能会同时访问和修改缓存中的数据。为了防止缓存击穿、缓存雪崩或缓存不一致的问题,可以使用分布式锁来控制对缓存的访问和修改。例如,在更新缓存中的数据时,先加锁,更新完成后再释放锁,确保同一时间只有一个服务实例能够修改缓存数据。

5. 分布式任务调度
在分布式任务调度系统中,可能需要确保同一任务不会在多个节点上同时执行。使用分布式锁可以锁定任务的执行权,确保任务的原子性执行。例如,在定时任务系统中,使用分布式锁来防止同一任务的多个实例同时运行。

6. 分布式配置管理
在微服务架构中,配置中心用于管理服务的配置信息。当配置信息发生变更时,需要通知所有服务实例进行更新。为了防止配置更新过程中的冲突和不一致问题,可以使用分布式锁来控制配置更新的顺序和一致性。

7. 分布式会话管理
在分布式系统中,用户的会话信息可能分布在多个节点上。为了确保用户会话的一致性和安全性,可以使用分布式锁来控制对会话信息的访问和修改。例如,在用户登录时,使用分布式锁来确保同一时间只有一个节点能够处理登录请求并更新会话信息。

8. 分布式资源分配
在需要分配有限资源的场景中(如IP地址、端口号等),可以使用分布式锁来确保资源的合理分配和避免冲突。例如,在容器云平台中,使用分布式锁来管理IP地址的分配,确保每个容器实例都能获得唯一的IP地址。

这些业务场景只是分布式锁应用的一部分例子,实际上,在任何需要跨多个节点或进程进行同步操作的分布式系统中,分布式锁都可能成为解决同步问题的关键工具。

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

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

相关文章

学习华为IPD流程黑话2.0

目录 1、内容简介 2、概念六:管道管理 3、概念七:业务计划 4、概念八:IPMT 的投资活动 5、概念九:BETA、ESS、ESP 作者简介 1、内容简介 学习任何新事物都是从概念开始的。 以我个人最近遇到的一个事为例: 前…

探索国内商业地产之巅:卓越项目的标准是什么?

在我心目中,现阶段国内最好的商业地产项目,如果要从多个维度综合考虑的话,我会提名一些像“万象城”这样的城市综合体作为典范,特别是那些位于一线城市或新一线城市核心地段的万象城项目。 作为一个多年的地产从业者,…

Python——NumPy(第一讲)

文章目录 Numpy是什么?numpy的安装 array创建数组arange创建数组随机数创建随机数随机整数正太分布 ndarray 对象zeros创建ones创建empty 创建full()创建创建单位矩阵linspace创建logspace创建 Numpy是什么? Numpy(Numerical Python) 是科学计算基础库&…

数据结构(特殊二叉树-平衡二叉树)

平衡二叉树(AVL树) 前提一定是搜索二叉树,对于根节点的左右子树的高度差不能超过1,并且所有子树都要循序这个要求 如果一个搜索二叉树呈现或接近单支状,它的查找效率很低,很接近链表,因此如果能让它平衡时&#xff0c…

回望林徽因,给心怀梦想的女孩子以精神的力量。|于女生,影响你的命运的一个很重要的因素是将来的伴侣。

文章目录 引言I 《回望林徽因,给心怀梦想的女孩子以精神的力量。》怎样活出生命的价值和精彩?相爱的两个人,需要注意的地方是?普通日子的浪漫,藏在哪些细节里?一个女性最有魅力的时刻是?写作的美妙之处是什么?为什么说笑起来的样子很美?自由辽阔的心境,是什么样的感觉…

python中的fire和Linux shell中的参数传递

一、fire 安装 要使用 Python Fire 库,首先需要安装它。以下是安装步骤: 使用 pip 安装 可以通过 pip 直接安装 Python Fire: pip install fire 特性 自动生成命令行界面:将任何 Python 对象(函数、类、模块、字…

nodejs编译报错 集合

目录 一、使用命令编译typescript时报错,报错文件tsconfig.json 二、npm start运行后报错,could not find module 一、使用命令编译typescript时报错,报错文件tsconfig.json npx tsc 报错: Specified include paths were [&…

秋招突击——7/24——知识补充——JVM类加载机制

文章目录 引言类加载机制知识点复习类的生命周期1、加载2、连接——验证3、连接——准备4、连接——解析5、初始化 类加载器和类加载机制类加载器类加载机制——双亲委派模型 面试题整理1、类加载是什么2、类加载的过程是什么3、有哪些类加载器?4、双亲委派模型是什…

Redis一致性与分布式锁

Redis一致性 何为redis一致性 即在项目中,redis缓存中的数据要与数据库当中的数据保持一致。 那么这里,就会有小伙伴要问了,redis缓存中的数据不就是从数据库当中查询出来的吗?怎么会不一致呢? 笔者在这里解答一下…

Unite 上海 强势回归

​​​ 他回归了 Unite 大会是一年一度的 Unity 全球开发者盛会。今年,Unite 将于 7 月盛夏点亮上海外滩。此次盛会,我们将以“团结”为核心,凝聚全球 3000 多位 Unity 社区精英的力量,共同开启 Unity 技术的新纪元。 在这里&am…

UE学习笔记--干货满满!FString 的 Equals 和 == 源码深度探析

目录 前言FString 的 operatorESearchCaseStricmpBothAsciiLowerAsciiStricmp 结论Stricmp 代码验证整理思路 前言 最近大概写了如下代码 TArray<FString> TestArray; FString Z1 "Z1", z1 "z1"; TestArray.Emplace(Z1);if(TestArray.Contains(z…

代码随想录第十七天|动态规划(1)

目录 LeetCode 509. 斐波那契数列 LeetCode 70. 爬楼梯 LeetCode 746. 使用最小花费爬楼梯 LeetCode 62. 不同路径 LeetCode 63. 不同路径 II 总结 动态规划在算法课上学习过&#xff0c;看过了之后有一些熟悉感。&#xff08;虽然贪心算法也学过&#xff0c;但是不如动态…

样式迁移及代码

一、定义 1、使用卷积神经网络&#xff0c;自动将一个图像中的风格应用在另一图像之上&#xff0c;即风格迁移&#xff1b;两张输入图像&#xff1a;一张是内容图像&#xff0c;另一张是风格图像。 2、训练一些样本使得样本在一些cnn的特征上跟样式图片很相近&#xff0c;在一…

Java字符串与Unicode编码(码点、代码单元、基本多语言平面BMP、辅助平面、代理对)

Java字符串与Unicode编码 1. Unicode编码简介 Unicode是一个为世界上所有书写系统设计的字符编码标准。它旨在解决不同编码标准之间不兼容的问题&#xff0c;使得计算机能够处理和显示世界上几乎所有的字符。Unicode为每个字符分配了一个唯一的数字&#xff0c;称为“码点”&…

字典集合案例

1.统计字符 统计字符串中每个字符出现的次数 s l like summer very much #去掉空格 s s.replace(" ","") d dict() for i in s:if i in d:d[i] 1else:d[i] 1 for i in d:print(i,d[i]) 2.求不重复的随机数 #导入随机数 import random a int(input(&q…

自动化测试的艺术:Xcode中GUI测试的全面指南

自动化测试的艺术&#xff1a;Xcode中GUI测试的全面指南 在软件开发过程中&#xff0c;图形用户界面&#xff08;GUI&#xff09;测试是确保应用质量和用户体验的关键环节。Xcode&#xff0c;作为苹果的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了一套强大…

智能疲劳驾驶检测:基于YOLO和深度学习的全流程实现

引言 疲劳驾驶是导致交通事故的重要原因之一。为了提高道路安全&#xff0c;及时检测和预警驾驶员的疲劳状态显得尤为重要。本文介绍了一种基于深度学习的疲劳驾驶检测系统。该系统利用YOLO模型&#xff08;YOLOv8/v7/v6/v5&#xff09;进行疲劳驾驶检测&#xff0c;并提供了详…

OD C卷 - 密码输入检测

密码输入检测 &#xff08;100&#xff09; 给定一个密码&#xff0c;‘<’ 表示删除前一个字符&#xff0c;输出最终得到的密码&#xff0c;并判断是否满足密码安全要求&#xff1a; 密码长度>8;至少包含一个大写字母&#xff1b;至少包含一个小写字母&#xff1b;至少…

探索若依(Ruoyi):开源的企业级后台管理系统解决方案

探索若依&#xff08;Ruoyi&#xff09;&#xff1a;开源的企业级后台管理系统解决方案 在现代企业管理中&#xff0c;拥有一个高效、稳定的后台管理系统是至关重要的。若依&#xff08;Ruoyi&#xff09;作为一款开源的企业级后台管理系统&#xff0c;为企业提供了丰富的功能…

SpringBoot中JSR303校验

JSR是 Java EE 的一种标准&#xff0c;用于基于注解的对象数据验证。在Spring Boot应用中&#xff0c;你可以通过添加注解直接在POJO类中声明验证规则。这样可以确保在使用这些对象进行操作之前&#xff0c;它们满足业务规则。个人认为非常有用的&#xff0c;因为它减少了代码中…