谈一谈Redis的分布式锁

2021-10-29 19:44:2902:19 1128
所属专辑:Redis面试通关12讲
声音简介

大家好,我系渣渣骥,今天跟大家分享的面试题是:谈一谈Redis的分布式锁

首先,为什么要使用分布式锁

现在的架构都不再是单体架构,而是由多个微服务组成的分布式架构。

假设现在微服务A部署在三台服务器A1A2A3, 使用了轮询的策略(即第一次请求访问 A1,第二次A2,第三次A3)。

此时,如果有一些共享的资源,不使用分布式锁,A1A2A3之间就不知道对方加锁了(因为它们是不同的服务器,拥有不同的进程),依然会引发并发问题,这时候就需要分布式锁(诸如使用ZookeeperRedis做分布式锁)来保证并发操作时数据的一致性。


那么为什么要选择Redis做分布式锁呢?因为使用Redis做分布式锁性能是最佳的,比Zookeeper做分布式锁性能好,但是Zookeeper做分布式锁可靠性更高。所以不同的业务场景应该选择不同的锁。通常的建议是,像金融系统这种需要超高可靠性的场景,选则久经沙场的Zookeeper会是更好的选择。


那么,如何使用Redis做分布式锁呢?

以往,大家喜欢于使用RedisSENTX+EXPIRE的组合来实现分布式锁。但是,这种方法有缺陷,官方已经不推荐使用了。比如在Redis集群模式下使用SENTX,如果Master节点获取锁,但是Msater节点还没来得及同步数据到集群中其它节点之前崩溃了,新的Master节点仍然可以获取锁,这样就会出现多个应用服务获取锁的情况。


目前,Redis官方推荐使用Redission操作Redis因为Redission是使用netty实现的,实现了无阻塞通信,相比Jedis来说会拥有更好的性能

另外,为了避免SENTX方案中多个服务获取锁的问题,Redission使用了Redlock算法获取锁。

Redlock算法思路大体如下:

1).获取锁都有一个超时时间,如果超时了则认为获取锁失败

2).在各个Redis节点上,尝试去获取锁,成功获取锁的Redis节点数超过总结点数(N)的一半加1(N/2 + 1),且没有超时的情况下,则认为成功获取锁。


用户评论

表情0/300
喵,没有找到相关结果~
暂时没有评论,下载喜马拉雅与主播互动
猜你喜欢
国际演说家“我想和世界谈一谈”

“国际演说家之‘我想和世界谈一谈’”是一档由学而思国际与北京新媒体集团“北京时间”共同发起的六一特别企划活动,将作为六一国际儿童节的献礼之作,于5月23日录制...

by:学而思国际

Redis入门到实战教程+redis分布式锁+企业解决方案

课程分为四大篇章,涵盖了Redis的各种数据结构和命令,Redis的各种常见Java客户端的应用和最佳实践。还有Redis在企业中的应用方案,例如共享sessi...

by:黑马程序员

微服务|SpringCloud+RabbitMQ+Docker+Redis+分布式

黑马程序员2021最新打造的微服务课程,不仅仅包含了最新的SpringCloudAlibaba技术栈,还包含了分布式系统中会碰到的各种各样的技术解决方案。微服务...

by:黑马程序员

Redis教程|Redis百科大全式讲解

本套教程基于对企业级应用的深度调研产出,采用Redis最新版本7.0进行讲授,兼容5.0和6.0版本,全线覆盖企业一线开发版本。课程涵盖Redis全套知识体系,...

by:动力节点教育

Redis面试通关12讲

欢迎大家收听Redis面试题通关12讲,这是渣渣骥最近收集的一些针对WEB后端开发的高频Redis面试题。同时,可以帮助大家复习一下Redis相关的基础知识,希...

by:跟渣渣骥学IT

超详细的Redis教程

全套资料获取方式:+v号java1060Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供...

by:动力节点教育

尚学堂高级讲师周老师Redis

尚学堂高级讲师周老师本节内容为VIP课程班级Redis试听课程,内容有限,详细版本可联系相关人员相关视频资料:QQ群:189555046相关视频资料:QQ...

by:互联阁