当前位置:首页 > 科技  > 软件

阿里面试官:Redis的分布式锁和Zookeeper的有啥区别?为啥要用它?

来源: 责编: 时间:2024-07-19 16:35:49 712观看
导读在分布式锁的实现方案中,通常就是数据库、Redis 以及 Zookeeper 这三种,关于分布式锁的多种实现方式及原理我们这里不展开了。图片本文主要聚焦 Redis 的分布式锁和Zookeeper 的分布式锁之间的区别,以及如何选择。其实在

在分布式锁的实现方案中,通常就是数据库、Redis 以及 Zookeeper 这三种,关于分布式锁的多种实现方式及原理我们这里不展开了。3fK28资讯网——每日最新资讯28at.com

图片图片3fK28资讯网——每日最新资讯28at.com

本文主要聚焦 Redis 的分布式锁和Zookeeper 的分布式锁之间的区别,以及如何选择。3fK28资讯网——每日最新资讯28at.com

其实在功能上,Redis 的分布式锁和 ZK 的分布式锁都能实现我们想要的功能,锁的互斥、重入等等。他们主要有以下几个区别:3fK28资讯网——每日最新资讯28at.com

性能区别

在性能方面,Redis 是基于内存存储的,而 ZK 是基于磁盘存储的,所以,在性能上,Redis 要比 ZK 更好一些。3fK28资讯网——每日最新资讯28at.com

自动释放

ZK 的锁的实现原理是基于客户端和服务端的连接来保证的,一旦连接断了,锁就会被自动释放。而 Redis 的锁是需要自己主动加锁和解锁的,除非达到了超时时间,否则不会自动释放。3fK28资讯网——每日最新资讯28at.com

所以,ZK 的分布式锁可以更好的应对客户端崩溃的情况,一旦客户端崩溃,锁就会释放,而 Redis 实现的分布式锁,一旦客户端崩溃了,就没有人去进行释放了,只能等超时。3fK28资讯网——每日最新资讯28at.com

锁能自动释放有啥好处?除了提升并发度以外,还有个好处就是可以减少死锁发生的概率。因为锁释放了,所以就不会出现死锁了。3fK28资讯网——每日最新资讯28at.com

一致性&可用性要求(CAP)

我们分别介绍过关于 Redis和 Zookeeper 的 CAP 的实现情况,我们知道ZK 是一个 CP 的系统,也就是他是保证强一致性的,而 Redis 是一个 AP 的系统,它是保证可用性的。3fK28资讯网——每日最新资讯28at.com

ZK 会牺牲可用性来保证数据的一致性,即出现部分节点宕机后,集群中少于一半的节点后,或者集群正在进行 master 选举时,都会拒绝新的写请求,导致无法加锁。3fK28资讯网——每日最新资讯28at.com

而Redis 会牺牲一致性性来保证可用性,即 Redis 的集群中在做数据同步时,如果出现网络延迟,那么即使多个节点上面的数据不一样,客户端也可以正常的进行写入和读取。3fK28资讯网——每日最新资讯28at.com

那么,在使用 ZK 的分布式锁的时候,不会存在锁丢失的情况,也就是说不太会出现因为锁丢失而导致并发的情况。但是,可能会出现短暂的无法加锁的情况。3fK28资讯网——每日最新资讯28at.com

而在使用 Redis 的分布式锁的时候,除非集群都挂了,要不然不太会出现无法加锁的情况。但是可能会出现锁丢失的情况,或者说是重复加锁的情况,我们介绍 RedLock 的时候提到的单点故障的问题。(详见我八股文中关于《什么是RedLock,他解决了什么问题》)3fK28资讯网——每日最新资讯28at.com

做个总结

Redis 实现的分布式锁、性能更好,可用性更高。ZK 实现的分布式锁可以自动释放,减少死锁出现的概率,并且他的一致性更有保障。3fK28资讯网——每日最新资讯28at.com

所以,如果你的分布式锁使用场景,对性能要求更高,可以牺牲一点一致性,那么就选择 Redis的分布式锁。而如果你的场景对性能要求没那么高,但是对一致性要求非常高,那么则可以选择 Zookeeper3fK28资讯网——每日最新资讯28at.com

But

凡事都有个 but,下面就是一些经验之谈了。3fK28资讯网——每日最新资讯28at.com

其实,如果你对可用性的要求高的话,用 Redis 也行,因为有个 RedLock,他的机制和 zk 很像,都是通过半数以上提交这种方式来避免因为单点问题而导致锁重复的。3fK28资讯网——每日最新资讯28at.com

但是,RedLock 其实我也不建议大家用,并且 ZK的分布式锁我其实也不建议大家用。就直接用 Redis 就好了。(详见我的八股文中《Redisson 中为什么要废弃 RedLock,该用啥?》)3fK28资讯网——每日最新资讯28at.com

为啥呢?因为一般来说,我们在用分布式锁的时候,对性能要求肯定很高的,如果不高的话,你直接用数据库的悲观锁就好了。没必要用分布式锁。3fK28资讯网——每日最新资讯28at.com

而且,往往我们在用分布式锁的时候,同时会伴随着幂等性判断、以及数据库兜底的唯一性约束的校验。所以,即使出现了极端情况,因为 Redis 的一致性没保证好,导致重复加锁了,我们也能在后续的环节中识别并防止并发。3fK28资讯网——每日最新资讯28at.com

而 Redis 的不可用的问题其实可以通过哨兵、集群等运维手段来解决的,所以,发生的概率本来就极低。所以说,日常开发的时候,只要我们把幂等判断、唯一性约束做好,对账最好,用 Redis 是最简单,高效的办法。3fK28资讯网——每日最新资讯28at.com

而且,Redis 作为一个缓存框架,很多应用都会直接依赖,直接用SETNX 或者 Redisson 加锁不要太方便。而 Zookeeper,很多都是中间件在使用他, 真正的业务应用依赖的很少的,多引入一个底层中间件,对系统来说也会提升复杂度,减少整体的稳定性的。3fK28资讯网——每日最新资讯28at.com

除非你真的完全接受不了不一致性,完全不能接受重复加锁,有很愿意依赖 zookeeper,那当我没说,我认为这种情况少之又少。3fK28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-101850-0.html阿里面试官:Redis的分布式锁和Zookeeper的有啥区别?为啥要用它?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vue 组件管理的新趋势!以后可能不再需要组件库了?

下一篇: 2024年新的原生嵌套CSS特性:绝对改变游戏规则

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top