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

什么是分布式锁

定义
分布式锁是控制分布式系统或集群中不同节点对共享资源访问的一种机制。在分布式环境下,多个节点(如多个服务器或多个进程)可能会同时访问诸如数据库中的某条记录、一个共享文件或者一个全局计数器等共享资源。分布式锁的目的是确保在同一时刻,只有一个节点能够访问这个共享资源,就像在单进程环境中使用互斥锁(mutex)来保护临界区一样。
实现方式
基于数据库实现
乐观锁方式:可以利用数据库表中的一个版本号(version)字段来实现。例如,当一个节点想要访问共享资源时,它首先读取资源的版本号。在更新资源时,它会检查当前版本号是否与之前读取的版本号一致。如果一致,则更新资源并将版本号加1;如果不

一致,则说明有其他节点已经修改了资源,当前节点需要重新读取最新的资源状态。
悲观锁方式:使用数据库的排他锁(for update)。例如,在MySQL中,当一个事务对某行数据执行“select...for update”语句时,会对该行数据加排他锁,其他事务如果也想对该行数据进行修改操作,就会被阻塞,直到持有锁的事务提交或回滚。
基于缓存实现(如Redis)
以Redis为例,常用的命令是SETNX(SET if Not eXists)。当一个节点想要获取锁时,它使用SETNX命令尝试在Redis中设置一个特定的键值对。如果键不存在(即成功获取锁),则设置成功,节点可以继续访问共享资源;如果键已经存在(即锁已经被其他节点获取),则设置失败,节点需要等待或者重试。同时,为了防止节点获取锁后由于某些原因(如进程崩溃)没有释放锁,还会设置一个过期时间,确保锁最终能够被释放。
基于Zookeeper实现
Zookeeper是一个分布式协调服务,它通过临时顺序节点来实现分布式锁。当一个节点想要获取锁时,它在Zookeeper的一个指定节点下创建一个临时顺序节点。然后,节点会检查自己创建的节点是否是序号最小的节点。如果是,则表示获取锁成功,可以访问共享资源;如果不是,它会监听比自己序号小的节点的删除事件,当比自己序号小的节点被删除(即持有锁的节点释放锁)时,它会再次检查自己是否是序号最小的节点,以此来获取锁。

http://www.lryc.cn/news/493739.html

相关文章:

  • 【含开题报告+文档+PPT+源码】基于SpringBoot的艺术培训学校管理系统的设计与实现
  • 【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限
  • Flutter:列表分页,上拉加载下拉刷新,在GetBuilder模板使用方式
  • 硬件基础22 反馈放大电路
  • 挑战用React封装100个组件【001】
  • linux高级系统编程之进程
  • nextjs+nestjs+prisma写todolist全栈项目
  • 基于Matlab的图像去噪算法仿真
  • Docker pull镜像拉取失败
  • fastjson不出网打法—BCEL链
  • vue2 中使用 Ag-grid-enterprise 企业版
  • Redis开发03:常见的Redis命令
  • 研0找实习【学nlp】14--BERT理解
  • mysql之基本常用的语法
  • 基于Linux的patroni搭建标准
  • 2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)
  • Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)
  • (四)3D视觉机器人的手眼标定(眼在手外)
  • 安达发|制造业APS智能优化排产软件的四类制造模型解决方案
  • 命令行使用ssh隧道连接远程mysql
  • 力扣第 71 题 简化路径
  • 使用ENSP实现OSPF
  • 分布式下怎么优化处理数据,怎么代替Join
  • 51单片机快速入门之中断的应用 2024/11/23 串口中断
  • [Java]微服务配置管理
  • c/c++ 用easyx图形库写一个射击游戏
  • Rust eyre 错误处理实战教程
  • 面试小札:JVM虚拟机
  • Docker扩容操作(docker总是空间不足)
  • 数字图像处理(4):FPGA中的定点数、浮点数