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

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

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

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

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

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

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

性能区别

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

自动释放

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

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

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

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

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

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

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

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

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

做个总结

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

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

But

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 机构称Q2全球智能手机出货量同比下滑11% 苹果份额依旧第2

    7月20日消息,据外媒报道,研究机构的报告显示,由于需求下滑,今年二季度全球智能手机的出货量,同比下滑了11%,三星、苹果等主要厂商的销量,较去年同期均有下
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 利用职权私自解除被封帐号 Meta开除20多名员工

    11月18日消息,据外媒援引知情人士表示,过去一年时间内,Facebook母公司Meta解雇或处罚了20多名员工以及合同工,指控这些人通过内部系统以不当方式重置用户帐号,其
Top