温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

redis可以做分布式锁的原因是什么

发布时间:2020-04-24 14:56:29 来源:亿速云 阅读:314 作者:小新 栏目:关系型数据库

redis可以做分布式锁的原因是什么?相信有很多人都不太了解,今天小编为了让大家更加了解redis可以做分布式锁的原因,所以给大家总结了以下内容,一起往下看吧。

redis可以做分布式锁的原因是什么

Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。

代码实现的,主要是针对某一笔数据的流水号加锁,防止多个线程写入这个数据。(具有互斥性)  

现在最流行的redis分布式锁就是Redisson了,来看看它的底层原理就了解redis是如何使用分布式锁的了

redis可以做分布式锁的原因是什么原理分析

分布式锁要解决的是分布式环境下,并行相同代码的加锁功能;了解过redis分布式锁的人肯定知道,一开始redis作为分布式锁用的是setnx,再这基础上设置个定时过期时间,但这种方式有什么问题呢?

实际上看懂上图的人也就明白了那有什么问题,首先是原子性问题,setnx+过期时间这两个操作必须是原子性的,所以这可以用lua脚本解决

再然后是释放锁的时机该如何定?

不管我们定多少过期时间,都不能保证,在这段时间内锁住的代码执行完成了,所以这个时间定多少都不好;

如果不定时间,当执行完成后释放锁,问题就是如果执行到一半机器宕机,那这把锁就永远放不掉了

那Redisson是如何解决上述问题的呢?

它对代码进行了精简的封装,我们的使用非常简单,甚至我们不用主动设置过期时间

它设计了个watch dog看门狗,每隔10秒会检查一下是否还持有锁,若持有锁,就给他更新过期时间30秒;通过这样的设计,可以让他在没有释放锁之前一直持有锁,哪怕宕机了,也能自动释放锁

而不能获得锁的客户端则是不断循环尝试加锁

通过记录锁的客户端id,可以把它设计成可重入锁

redis可以做分布式锁的原因是什么

关于redis可以做分布式锁的原因是什么就分享到这里了,希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI