当前位置: 首页 > news >正文

分布式锁的应用场景及实现

文章目录

  • 分布式锁的应用场景及实现
    • 1. 应用场景
    • 2. 分布式锁原理
    • 3. 分布式锁的实现
      • 3.1 基于数据库

分布式锁的应用场景及实现

1. 应用场景

电商网站在进行秒杀、特价等大促活动时,面临访问量激增和高并发的挑战。由于活动商品通常是有限库存的,为了避免库存超卖和并发问题,分布式锁是一种有效的解决方案。

2. 分布式锁原理

分布式锁是一种多节点共享的同步机制,通过在多个节点之间协调访问资源,确保在同一时间只有一个节点能够获取锁并执行关键操作。

分布式锁的目的就是保证在分布式部署的应用集群中,多个服务在请求同一个方法或者同一个业务操作的情况下,对应业务逻辑只能被一台机器上的一个线程执行,避免出现并发问题。

在电商网站中,商品的库存即为共享资源,可以使用分布式锁来控制并发访问。

在这里插入图片描述

3. 分布式锁的实现

3.1 基于数据库

基于关系型数据库实现分布式锁是根据数据库的唯一性约束特性来实现资源的锁定。数据库的唯一性约束是指数据库表的某个字段值或者多个列组合的值不能重复。据此,我们可以创建一个锁表,包含资源名等字段,并为要锁定的资源名添加唯一索引。

当需要给某个资源加锁时,通过向数据库插入对应的资源来获取锁:

  • 如果插入成功,表示成功获取锁;
  • 如果插入失败,表示锁已经被占用。
  • 在成功获取锁并处理完流程后要释放锁,删除对应的表记录即可。

创建一张分布式资源锁表:

CREATE TABLE `resourceLock` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`resource_name` varchar(64) NOT NULL DEFAULT '' COMMENT '锁定的资源',
PRIMARY KEY (`id`),
UNIQUE KEY `uidx` (`resource_name `) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='对资源加锁';

如上,resource_name字段做了唯一性约束,要对某个资源加锁时,执行

insert into resourceLock(resource_name) values ("resource_name");

根据insert语句的执行结果判断是否加锁成功。

基于数据库实现分布式锁有一些问题需要注意:

  1. 超时无法失效。需要通过定时任务或时间戳对比来删除超时数据。
  2. 数据库实现方式无法实现阻塞,需要重试insert操作来阻塞其他线程,但会带来服务器和数据库资源的浪费。
http://www.lryc.cn/news/304735.html

相关文章:

  • 嵌入式Linux中apt、apt-get命令用法汇总
  • Unity之ShaderGraph如何实现水面波浪
  • 无线局域网(WLAN)简单概述
  • 学习数仓工具 dbt
  • 高录用快见刊【最快会后两个月左右见刊】第三届社会科学与人文艺术国际学术会议 (SSHA 2024)
  • C语言-指针初学速成
  • MQL语言实现单元测试
  • Redis信创平替之TongRDS(东方通),麒麟系统安装步骤
  • nginx服务
  • 多数pythoneer只知有列表list却不知道python也有array数组
  • 【Rust】——控制流(if-else,循环)
  • 通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试
  • 费舍尔FISHER金属探测器探测仪维修F70
  • Airtest-Selenium实操小课③:下载可爱猫猫图片
  • Druid无法登录监控页面
  • 【Linux系统化学习】深入理解匿名管道(pipe)和命名管道(fifo)
  • 信息学奥赛一本通1209:分数求和
  • LabVIEW储氢材料循环寿命测试系统
  • Unity3D 框架如何搭建基于纯Lua的U框架与开发模式详解
  • Linux常见指令(2)
  • 【C++】封装
  • Maxwell安装部署
  • 说一下JVM类加载机制?
  • 解决SpringAMQP工作队列模型程序报错:WARN 48068:Failed to declare queue: simple.queue
  • mysql在服务器中的主从复制Linux下
  • QT-Day2
  • 流量分析——陇剑杯 2021【签到、jwt】
  • Java并发基础:原子类之AtomicIntegerFieldUpdater全面解析
  • 普中51单片机学习(串口通信)
  • 【ArcGIS】利用高程进行坡度分析