李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 系列文章
  • AI工具集
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
白雪成红
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

浅谈一下redis分布式锁和zookeeper分布式锁的区别以及各自的优缺点

2025年2月16日 约 1,156 字4 分钟 169 0 0
本文最后更新于 2025年2月16日,距今已 601 天,其中的信息可能已经发生变化,请注意甄别。

区别

实现原理

  • Redis 分布式锁:主要基于 Redis 的原子操作。常见的是使用 SETNX(SET if Not eXists)命令或者 SET 命令的扩展参数(如 NX、EX)来实现。当一个客户端成功设置锁对应的键值时,就表示获取到了锁;释放锁则是删除对应的键。为了防止死锁,通常会给锁设置一个过期时间。
  • ZooKeeper 分布式锁:基于 ZooKeeper 的临时顺序节点和 Watcher 机制。客户端在 ZooKeeper 的特定节点下创建一个临时顺序节点,然后获取该节点下所有子节点的列表,判断自己创建的节点是否是序号最小的节点,如果是则表示获取到了锁;若不是则对前一个节点设置 Watcher 监听,当该节点被删除时,当前客户端会收到通知,再次检查自己是否成为最小节点以尝试获取锁。

锁的释放机制

  • Redis 分布式锁:通常需要客户端主动删除锁对应的键来释放锁。如果客户端在持有锁期间崩溃,通过设置的过期时间可以自动释放锁,避免死锁。
  • ZooKeeper 分布式锁:由于使用的是临时节点,当客户端会话结束(如客户端崩溃或网络断开),对应的临时节点会自动删除,从而实现锁的自动释放。

性能

  • Redis 分布式锁:性能较高,因为 Redis 是基于内存的单线程操作,读写速度非常快,加锁和解锁的操作延迟较低,适合对性能要求较高、并发量较大的场景。
  • ZooKeeper 分布式锁:性能相对较低,因为 ZooKeeper 是基于分布式协调服务,涉及到节点的创建、删除和 Watcher 机制,会有一定的网络开销和处理延迟,不过对于并发量不是特别大的场景,其性能也是可以接受的。

可靠性

  • Redis 分布式锁:在单点 Redis 情况下,如果 Redis 节点故障,可能会导致锁机制失效。虽然可以通过 Redis 集群(如 Redis Sentinel 或 Redis Cluster)来提高可靠性,但在主从切换等情况下,可能会出现短暂的锁丢失问题。
  • ZooKeeper 分布式锁:可靠性较高,ZooKeeper 本身是一个分布式协调服务,采用了 Zab 协议保证数据的一致性和高可用性。只要半数以上的节点正常工作,就能保证锁机制的正常运行,不会因为个别节点故障而导致锁失效。

优缺点

Redis 分布式锁

  • 优点
    • 高性能:基于内存操作,响应速度快,能够支持高并发场景下的锁操作。
    • 简单易用:实现方式相对简单,只需要使用 Redis 的基本命令即可,对开发者的技术要求较低。
    • 灵活性高:可以通过设置不同的过期时间来满足不同业务场景的需求,避免死锁的发生。
  • 缺点
    • 可靠性问题:在 Redis 集群环境下,存在主从切换时锁丢失的风险。
    • 锁的粒度控制有限:主要基于键值对来实现锁,对于复杂的锁粒度控制(如读写锁、可重入锁等)实现起来相对复杂。

ZooKeeper 分布式锁

  • 优点
    • 高可靠性:采用分布式协调服务,具备良好的数据一致性和高可用性,能够保证锁机制在节点故障时依然正常工作。
    • 锁的特性丰富:可以方便地实现公平锁、可重入锁等复杂的锁特性,满足不同业务场景的需求。
    • 自动释放锁:使用临时节点,客户端会话结束时锁会自动释放,避免了死锁的问题。
  • 缺点
    • 性能较低:由于涉及到节点的创建、删除和 Watcher 机制,会带来一定的网络开销和处理延迟,不适合对性能要求极高的场景。
    • 部署和维护复杂:ZooKeeper 是一个分布式系统,需要部署多个节点组成集群,部署和维护的成本相对较高。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

浅谈一下redis分布式锁和zookeeper分布式锁的区别以及各自的优缺点

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: 分布式 锁
最后更新:2025年2月16日

岁月同一天 10 月 11 日

回望过去的今天,你在写什么

  • 中间件
    1 年前 2025年10月11日
    Kafka 为什么要抛弃 Zookeeper?

    Kafka 抛弃 Zookeeper(引入 KRaft 模式)是为了解决长期依赖 Zookeeper 带来的性能瓶颈、架…

  • 中间件
    1 年前 2025年10月11日
    高性能场景为什么推荐使用PostgreSQL,而非MySQL?

    在高性能场景(如高并发读写、复杂查询、大数据量存储、多维度数据处理等)中,PostgreSQL 常被优先推荐,核心原因在…

  • 原创
    7 年前 2019年10月11日
    JAVA关键字之volatile关键字说明

    volatile作用 volatile主要是为了解决多线程内存不可见问题。 对于一写多读,是可以解决变量同步问题,但是如…

相关文章
  • SpringBoot基于redis的分布式锁的实现(源码)2019年7月20日
  • 分布式、多线程、高并发概念与区别2019年10月18日
  • 分布式锁-Zookeeper实现分布式锁2019年11月11日
  • SpringBoot 实现接口防刷的 5 种实现方案2025年5月27日
  • k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦2020年4月8日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

苟利国家生死以,岂因祸福避趋之。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
讨论下XXL-JOB GLUE模式的安全问题 心气没了,干什么都不得劲 Kratos-plus v1.1.26版本更新说明 我觉得是时候公布我的导航网站了 代码是 AI 写的,生产事故谁背锅? 给主题增加了游客中心功能
给主题增加了游客中心功能我觉得是时候公布我的导航网站了游本昌去世关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能心气没了,干什么都不得劲
nginx反向代理配置去除前缀 精通Linux根目录:核心文件夹深度解析与实战指南 AI 编程进阶指南:从“能用”到“高效”的 10 大实战技巧(2025 版) Redis7+&8.X 全新进阶系列(02):Redis Functions 详解——替代Lua脚本的官方轻量化函数方案 百度的索引量数据现在有点儿太夸张了吧? 祝大家六一儿童节快乐~~~
最近评论
老张博客 发布于 11 小时前(10月10日) NAS现在就不要搞了吧,除非你手里有内存和硬盘。
李锋镝 发布于 16 小时前(10月10日) 确实,很多不必要的东西,买了回来也是吃灰……
林羽凡 发布于 20 小时前(10月10日) 一个是不想折腾了,另一个有些觉得没必要的折腾或购买,想想就会算了。
李锋镝 发布于 20 小时前(10月10日) 少年老成吧大概是 :21:
Hary 发布于 20 小时前(10月10日) 我也是这样,感觉都不想折腾了,我还没到中年呢吧啊啊啊
标签聚合
K8s AI 日常 Redis Theme JAVA ElasticSearch WordPress Spring AI编程 架构 分布式 SpringBoot Claude JVM 数据库 IDEA SQL MySQL 多线程
友情链接
  • 林羽凡
  • 老张博客
  • 皮皮社
  • 彬红茶日记
  • Mr.Sun的博客
  • 九仞之行
  • 知向前端
  • sssr7844的博客
  • Honesty
  • 志文工作室
  • lijie blog
  • 搬砖日记
  • 韩小韩博客
  • 韩情脉脉
  • 哥斯拉
  • 瓦匠个人小站
  • 懋和道人
  • Serendipity

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com 十年之约虫洞

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号