加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 动态 > 正文

万字长文带你解读Redisson分布式锁的源码

发布时间:2021-04-11 12:58:48 所属栏目:动态 来源:互联网
导读:了Redis分布式锁的原理和缺陷,觉得有些不过瘾,只是简单的介绍了下Redisson这个框架,具体的原理什么的还没说过呢。趁年后暂时没什么事,反正闲着也是闲着,不如把Redisson的源码也学习一遍好了。 虽说是一时兴起,但仔细研究之后发现Redisson的源码解读工

了Redis分布式锁的原理和缺陷,觉得有些不过瘾,只是简单的介绍了下Redisson这个框架,具体的原理什么的还没说过呢。趁年后暂时没什么事,反正闲着也是闲着,不如把Redisson的源码也学习一遍好了。

虽说是一时兴起,但仔细研究之后发现Redisson的源码解读工作量还是挺大的,其中用到了大量的Java并发类,并且引用了Netty作为通信工具,实现与Redis组件的远程调用,这些知识点如果要全部讲解的话不太现实,本文的重点主要是关于Redisson分布式锁的实现原理,所以网络通信和并发原理这块的代码解读不会太仔细,有不足之处还望见谅!

Redis 发布订阅

之前说过,分布式锁的核心功能其实就三个:加锁、解锁、设置锁超时。这三个功能也是我们研究Redisson分布式锁原理的方向。

在学习之前,我们有必要先了解一个知识点,就是有关Redis的发布订阅功能。

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息,发布者可以向指定的渠道 (channel) 发送消息,订阅者如果订阅了该频道的话就能收到消息,从而实现多个客户端的通信效果。开启两个客户端,一个订阅了频道channel1,另一个通过PUBLISH发送消息后,订阅的那个就能收到了,靠这种模式就能实现不同客户端之间的通信。

关于这种通信模式有哪些妙用场景我们就不展开了,大家可以自己去网上查阅学习一下,我们的主角还是Redisson,热身完毕,该上主菜了。

Redisson源码

在使用Redisson加锁之前,需要先获取一个RLock实例对象,有了这个对象就可以调用lock、tryLock方法来完成加锁的功能

面初始化了几个参数,

commandExecutor:异步的Executor执行器,Redisson中所有的命令都是通过...Executor 执行的 ;

id:唯一ID,初始化的时候是用UUID创建的;

internalLockLeaseTime:等待获取锁时间,这里读的是配置类中默认定义的,时间为30秒;

同时,图片里我还标注了一个方法getEntryName,返回的是 “ID :锁名称” 的字符串,代表的是当前线程持有对应锁的一个标识,这些参数有必要留个印象,后面的源码解析中经常会出现。

说完了初始化的东西,我们就可以开始学习加锁和解锁的源码了。

加锁

Redisson的加锁方法有两个,tryLock和lock,使用上的区别在于tryLock可以设置锁的过期时长leaseTime和等待时长waitTime,核心处理的逻辑都差不多,我们先从tryLock讲起。

tryLock

代码有点长啊。。。整成图片不太方便,直接贴上来吧,

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读