详细说说Redis分布式锁和ZK分布式锁

article/2025/8/21 9:08:29

在分布式系统中,分布式锁是实现资源互斥访问的核心机制。Redis 和 ZooKeeper(ZK)是两种常用的分布式锁实现方案,但它们的实现原理、优缺点和适用场景存在显著差异。


一、Redis 分布式锁

实现原理
  1. 基础命令

    • SET key value NX PX timeout(推荐方式):
      • NX:仅当键不存在时设置键值(保证互斥)。
      • PX:设置键的过期时间(避免死锁)。
    • 示例:SET lock:order123 "client1" NX PX 30000
      (客户端 client1 获取锁,锁自动释放时间为 30 秒)
  2. 释放锁

    • 必须通过 Lua 脚本原子性验证值后删除,防止误删其他客户端的锁:
      if redis.call("GET", KEYS[1]) == ARGV[1] thenreturn redis.call("DEL", KEYS[1])
      elsereturn 0
      end
      
  3. 高级方案

    • RedLock 算法(多节点 Redis 集群):
      • 客户端依次向多个 Redis 节点申请锁,超过半数成功则视为获取锁。
      • 争议点:时钟漂移、网络分区等问题可能影响正确性(社区存在争论)。
核心特性
  • AP 系统:Redis 优先保证可用性(Availability)和分区容忍性(Partition Tolerance),弱一致性。
  • 性能高:基于内存操作,适合高并发场景。
  • 锁自动释放:依赖过期时间,需合理设置避免业务未完成锁失效。
优点
  • 简单易用:API 直观,适合快速实现。
  • 高吞吐量:单节点 Redis 可支撑数万 TPS。
  • 容错性:通过 RedLock 降低单点故障风险(但有争议)。
缺点
  • 非强一致:主从异步复制可能导致锁丢失(故障转移时)。
  • 时钟依赖:过期时间依赖系统时钟,时钟漂移可能引发问题。
  • 误删风险:需严格通过 Lua 脚本保证原子性释放。

二、ZooKeeper 分布式锁

实现原理
  1. 临时顺序节点

    • 客户端在 ZK 的锁目录下创建临时顺序节点(如 /locks/lock_00000001)。
    • 临时性:客户端会话结束(如宕机)时节点自动删除,避免死锁。
    • 顺序性:节点按创建顺序编号,便于实现公平锁。
  2. 锁获取

    • 客户端检查自己是否是当前最小序号节点:
      • 如果是,获得锁。
      • 否则,监听前一个节点的删除事件(避免“羊群效应”)。
  3. 锁释放

    • 业务完成后主动删除节点,或会话超时后自动删除。
核心特性
  • CP 系统:ZooKeeper 优先保证一致性(Consistency)和分区容忍性(Partition Tolerance)。
  • 强一致性:通过 ZAB 协议保证数据一致性。
  • 公平锁:天然支持按顺序获取锁。
优点
  • 可靠性高:无锁超时问题,客户端宕机自动释放锁。
  • 无时钟依赖:锁的释放仅依赖会话状态。
  • 可监控:通过 Watcher 机制实现锁状态实时感知。
缺点
  • 性能较低:ZK 的写操作(如创建节点)需集群多数节点确认,吞吐量低于 Redis。
  • 实现复杂:需处理 Watcher 的触发和重连逻辑。
  • 网络敏感:频繁的 Watcher 通知可能引发性能问题。

三、关键对比

特性Redis 分布式锁ZooKeeper 分布式锁
一致性模型AP(最终一致)CP(强一致)
性能高吞吐量(内存操作)较低(需集群协调)
锁释放方式依赖过期时间(需合理设置)会话结束自动释放(无超时风险)
可靠性依赖 Redis 持久化和集群机制高(强一致性保证)
实现复杂度简单(基于 SETNX + Lua)复杂(需处理节点监听和回调)
适用场景高并发、允许短暂不一致强一致性、高可靠性要求
典型问题锁提前释放、脑裂问题羊群效应、会话管理

四、场景选择建议

  1. 选择 Redis

    • 高并发场景(如秒杀、库存扣减)。
    • 允许短暂锁失效(业务能处理重试或幂等)。
    • 对性能要求极高,可接受最终一致性。
  2. 选择 ZooKeeper

    • 需要强一致性(如金融交易、关键配置更新)。
    • 锁持有时间较长或不可预测(避免超时风险)。
    • 需要公平锁或可重入锁。

五、注意事项

  • Redis 锁的陷阱
    • 避免锁过期时间过短导致业务未完成锁被释放。
    • 推荐使用 Redisson 客户端(内置看门狗自动续期)。
  • ZK 锁的优化
    • 使用临时顺序节点避免羊群效应。
    • 合理设置会话超时时间(sessionTimeout)。

🐮👵

  • Redis 分布式锁:轻量级、高性能,适合对一致性要求不高的高频场景。
  • ZooKeeper 分布式锁:强一致、高可靠,适合关键业务场景,但需容忍较低性能。

你想要的我全都有:https://pan.q删掉憨子uark.cn/s/75a5a07b45a2

在这里插入图片描述


http://www.hkcw.cn/article/xUpadkFvax.shtml

相关文章

特朗普关税政策获批暂时恢复实施 法院裁决反转

当地时间5月29日,美国联邦巡回上诉法院批准特朗普政府的请求,暂时搁置了美国国际贸易法院此前做出的禁止执行特朗普政府依据《国际紧急经济权力法》对多国加征关税措施的裁决。联邦巡回上诉法院在裁决书中表示,在审议相关动议文件期间,美国国际贸易法院作出的判决和永久性禁…

官方通报小车超速坠桥致5死 事故原因正调查

官方通报小车超速坠桥致5死 事故原因正调查!5月19日18时23分,苏某驾驶一辆小汽车搭载4人沿环莞快速路行驶。在虎门一水库特大桥路段,车辆因超速冲破防撞沙桶和护栏后坠桥,导致车上5名司乘人员受伤。尽管被紧急送往医院抢救,但最终不幸全部死亡。事故发生后,市镇两级政府迅…

MTK平台-- 如何在屏幕关闭时过滤组播和广播的数据包

一 前言: 这段时间做了一些MTK平台的开发,关于一些WIFI的优化和大家分享下 当DUT(被测设备)连接到wifi网络时,有许多不重要的组播或广播数据包会在屏幕关闭时唤醒DUT的主机,为了降低功耗,DUT需要过滤这些数据包; MTK固件提供一些客户自定义的功能,如关闭过滤组播和…

交通违法拍照数据集,可识别接打电话,不系安全带的行为,支持YOLO,COCO JSON,VOC XML格式的标注数据集 最高正确识别率可达88.6%

交通违法拍照数据集 数据集概述 数据来源:交通监控摄像头、执法记录仪、公开数据集数据类型:图像、视频、元数据(时间、地点、车辆信息)违法类型标注:接打电话、未系安全带 数据采集与标注方法 采集设备&#xff1…

DMBOK对比知识点对比(2)

1.违背伦理进行数据处理的风险 违背伦理进行数据处理的风险风险

特朗普:5月30日将是马斯克在政府效率部最后一天

当地时间5月29日,美国总统特朗普在社交媒体上发文表示,5月30日将是埃隆马斯克在政府效率部的最后一天,他将于美国东部时间30日13时30分在椭圆形办公室与马斯克举行新闻发布会。美国企业家、政府效率部负责人埃隆马斯克28日在社交媒体上说,他作为“特殊政府雇员”的任期结束…

易经六十四卦象解释数据集分享!智能体知识库收集~

今天给大家分享一个易经六十四卦象解释数据集 ,继续来积累AI相关的资料。 六十四卦,记载于《易经》,每一卦的图像均由两个八卦上下组合而成,每一卦各有六个爻。南宋朱熹说,先画八卦于内,后画八卦于外&#…

使用Zxing导出底部带有文字的二维码

1、引入依赖 <!-- Maven 依赖 --> <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version> </dependency>2、生成二维码 import com.google.zxing.BarcodeFormat; i…

Linux文件操作、文件夹操作

一、文件操作 二、文件夹操作

胖东来红内裤事件案宣判 百万粉丝博主赔偿40万

2025年5月28日,许昌市魏都区人民法院公开审理了许昌市胖东来商贸集团有限公司与段某之间的名誉权纠纷案,并当庭宣判。法院判决段某在其个人抖音账号“两个小段(小)”发布书面道歉信的视频,内容需经法院审核,且发布后30日内不得删除;同时,段某需赔偿许昌市胖东来商贸集团…

【Stable Diffusion 1.5 】在 Unet 中每个 Cross Attention 块中的张量变化过程

系列文章目录 文章目录 系列文章目录前言特征图和注意力图的尺寸差异原因在Break-a-Scene中的具体实现总结 前言 特征图 (Latent) 尺寸和注意力图(attention map)尺寸在扩散模型中有差异&#xff0c;是由于模型架构和注意力机制的特性决定的。 特征图和注意力图的尺寸差异原…

男子酒驾闯卡撞伤交警被刑拘 肇事司机已被控制

5月27日晚,交警在陕西西安莲湖区文景南路与农兴路十字路口附近设卡执勤时,一名男子驾车冲卡,冲毁护栏并撞伤了一名交警。该男子涉嫌酒驾,已被刑拘。事发后,该男子弃车逃离现场,但很快被执勤交警抓获。据事发地商户描述,听到撞击声后,一辆由北向南行驶的黑色商务车冲过道…

南京一公园内出现大量竹节虫 生态环境良好标志

近日,有网民在社交媒体上分享了南京老山国家森林公园内出现大量竹节虫的视频。从视频中可以看到,栏杆上布满了绿色的竹节虫,显得非常密集。29日上午,南京老山国家森林公园的工作人员确认,近期园内确实出现了不少竹节虫。不过,工作人员表示这种昆虫是无害的,不会攻击人类…

黑马点评项目02——商户查询缓存(缓存穿透、缓存雪崩、缓存击穿)以及细节

1.添加redis缓存 StringRedisTemplate 使用的是这个哈&#xff0c;有人可能有疑问&#xff0c;存放的是字符串吗&#xff0c;商铺值应该是个对象才对啊&#xff0c;在细节中解析 代码&#xff1a; Override public Result queryById(Long id) {//查询redis&#xff0c;若存在则…

python学习打卡day39

DAY 39 图像数据与显存 知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0c;理解内容即可 1.图像数据的格式&a…

代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )

图论part08 拓扑排序精讲 代码随想录讲解链接 题目链接 思路 在这个题目之中&#xff0c;个别文件的处理依赖于别的文件&#xff0c;因此&#xff0c;文件的处理顺序十分重要。我们用图来表示文件的处理顺序&#xff0c;文件s指向文件t&#xff0c;则说明如果要正确的处理文…

朱啸虎:曾三次错失宁德时代!

朱啸虎:曾三次错失宁德时代。近日,在腾讯视频《激流第二季》中,投资人朱啸虎谈及自己三次错失宁德时代,投资电池失败损失7000万美金的经历。他表示早期看了宁德时代三次,认为他们的技术不性感,不是最新一代,因而投了掌握美国最新一代技术的波士顿电池。结果最新的技术不…

女子观赏“蓝眼泪”失踪多方搜救 游客夜观奇景失联

5月26日傍晚,浙江台州温岭市松门镇海边的大坑沙村,23岁游客孙女士在徒步时失踪。警方和救援人员在山上和海里搜寻多日,但截至29日上午仍未找到她。孙女士生于2002年,平时与父亲一起在宁波生活。5月26日,她告诉父亲自己出去玩,当晚不回家,随后乘列车前往温岭市。当天下午…

PS linux 基础篇1-AXI_DMA

系列文章目录 文章目录 系列文章目录前言一、AXI DMA ip核二、BD工程三、PS linux工程1.使用开源的xilinx_axidma-master工程验证驱动2.按照其他的开源进行就行&#xff0c;没什么写的了 前言 PL与PS之间快速的接口&#xff0c;本文为LOOP回环测试 一、AXI DMA ip核 MM2S mem…

儿子打死父亲后母亲欲顶罪母子被判 家庭悲剧引发深思

49岁的宋甲长期酗酒,酒后经常殴打、辱骂妻儿。2024年7月5日,宋甲喝了一斤多白酒后回家辱骂儿子宋乙,妻子李某上前劝阻却被殴打。看到母亲被家暴,儿子打了父亲一拳,父子发生争吵打斗,最终儿子将父亲打死。案发后,母子共同清理现场,并焚烧了作案工具。李某为了保护儿子,…