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

Redis 实现分布式锁

 分布式锁是一种用于在分布式系统中实现同步和互斥访问的机制。在分布式系统中,多个节点同时访问共享资源可能会导致数据不一致或竞争条件的发生。分布式锁提供了一种保护共享资源的方式,以确保在任意时刻只有一个节点可以访问该资源,如:同一时刻每个订单只能有一个线程操作取消订单功能。

常见分布式锁实现:
MySQL:MySQL本身就带有锁机制,由于业务特性使用MySQL作为分布式锁并不合适,而且性能一般,一般很少使用MySQL来实现分布式锁。
ZooKeeper:ZooKeeper是企业级开发中较好的一个实现分布式锁的方案,相对于Redis,ZooKeeper的部署和维护复杂一些。此外,ZooKeeper的性能相对较低,适用于对性能要求不高的场景。
Redis:Redis分布式锁的实现通常使用了SETNX(SET if Not eXists)命令和EXPIRE命令。使用SETNX可以尝试将一个键值对设置到Redis中,只有在该键不存在的情况下才能成功。成功获取锁的客户端可以设置一个过期时间,确保即使在发生故障的情况下,锁也能自动释放。
二、分布式锁具备的特点
实现的分布式锁,需要具备一下特征:

Redis 实现分布式锁的几种常见方式:

SETNX 命令实现

  • 加锁:使用 SETNX 命令尝试设置锁对应的 key,如果 key 不存在,则设置成功,获取锁。

  • 解锁:直接使用 DEL 命令删除对应的 key。但为了避免误删其他线程的锁,建议使用 Lua 脚本,通过 key 对应的 value 值来判断是否是自己的锁。

SET 命令实现

  • 加锁:使用 SET 命令,结合 NXEX 选项,一次性完成设置 key 和设置过期时间的操作。例如:SET resource_1 random_value NX EX 5,其中 resource_1 是锁的 key,random_value 是随机值,EX 5 表示设置过期时间为 5 秒。

  • 解锁:使用 DEL 命令删除 key。

Redisson 客户端实现

  • 加锁:通过 Redisson 客户端的 RLock 接口获取锁对象,调用 lock() 方法获取锁。如果未指定锁超时时间,会使用 Watch Dog 自动续期机制。

  • 解锁:调用 unlock() 方法释放锁。

RedLock 算法实现

  • 加锁:客户端向 Redis 集群中的多个独立的 Redis 实例依次请求申请加锁,如果客户端能够和半数以上的实例成功地完成加锁操作,则认为客户端成功地获得分布式锁。

  • 解锁:如果加锁失败,则要解锁所有的节点,不管该节点加锁时是否成功。

http://www.lqws.cn/news/561835.html

相关文章:

  • 【C++进阶】--- 继承
  • 鸿蒙 Grid 与 GridItem 深度解析:二维网格布局解决方案
  • 复杂驱动开发-TLE9471的休眠流程与定时唤醒
  • Python训练营-Day44-预训练模型
  • Java中的异常及异常处理
  • JDK17的GC调优
  • SpringCloud Stream 使用
  • Youtube双塔模型
  • 第27篇:SELinux安全增强机制深度解析与OpenEuler实践指南
  • eTools 开源发布
  • 如何在 Ubuntu 上通过终端或在 VirtualBox 中安装 GCC
  • 佳能Canon PIXMA G1020打印机信息
  • scGPT-spatial 复现
  • KS值:风控模型的“风险照妖镜”
  • Transformer结构--输入编码(BPE,PE)
  • Java面向对象(一)
  • JVM 之双亲委派机制与打破双亲委派
  • 【软考高项论文】论信息系统项目的进度管理
  • 【C++】简单学——类和对象(实现双向循环链表)
  • Python基础(吃洋葱小游戏)
  • Java Optional 详解:优雅处理空指针异常
  • 顺序表应用实践:从通讯录实现到性能优化深度解析
  • 有理函数积分——分式分解时设分解式的规则
  • Fine-Tuning Vision-Language-Action Models:Optimizing Speed and Success论文学习
  • SQL关键字三分钟入门:ROW_NUMBER() —— 窗口函数为每一行编号
  • FreeSWITCH配置文件解析(2) dialplan 拨号计划中xml 的action解析
  • 第一章 从零开始学习大型语言模型-搭建环境
  • 人大金仓数据库jdbc连接jar包kingbase8-8.6.0.jar驱动包最新版下载(不需要积分)
  • 5G核心网,NAS短消息的实现
  • 可编程逻辑器件的发展与比较