00:00
好,同学们,接下来我们来引入red sun进行我们编码的9.0版本的相关改造,从八升级到九。首先我们呢,通过前面的理论介绍知道了red lock这样的一种红锁算法,它最主要的给我们提供了一种功能,就是多机编码案例,所以我们先演示单机的,再演示多机的,一句话,你的分布式锁容red实力宕击了一个无所谓,我这有三台,你只要用RED3功能更强大,更全面,更加高可用的red分布式锁给你搭建完成。好,那么同学们开工,首先我们的Java微服务程序已经写到了8.0版,那该如何引入我们的red sun所对应的lock呢?这个是我们自己写的洛安。
01:00
不好说,那杨哥该怎么用呢?或者说你怎么知道要这么用呢?官网说话,来,同学们请看lo可重入锁,我们前面说过基于register red分布式可重入锁r lock Java对象实现了guc里面的lo接口,请看,所以说任何规范是不是一定要先要说一套接口啊?诶,我们自己实现的也有这个好,同时还提供了这些丰富的功能,那么来,人家写的是red.get lock,什么any lock,然后最常见的使用方法。lock.lock请告诉我,只不过是不是等号右边不一样,这是我们自己写的,现在是变成引入right sun来完成,剩下的是不是还是洛按洛这不一样的思想,只是细节底层代码不相同而已。所以同学们漏那么。在哪用,这个时候同学们知道了出处,那你说杨哥我还是不会来,这是不是他的光网,这是不是有个quick star点一下同学们你看看到没有啊,第一步那么是不是从美本上引入这些东东啊,所以呢,弟兄们来吧,首先9.0版本相关的修改第一步那么也就是。
02:23
键mod改泡沫,然后呢写亚沫主启动业务类等等,还是那套小口诀对吧?那么下面该改的改第一波引入我们的泡沫来writing sun直接粘贴进我们的样M文件里面和我们的啊口误我们的main文件里面,那么同学们请看我呢直接呢粘过来,再次强调请建议刷新一下,一定要在这看到这个说明你引入WRITTEN3成功,好,这是我们的第一步,第二步register con f那啥意思呢?请看我们的官网,我们这一步是不是按照。
03:00
Quick start来进行引入,Gra BT的等等随你,接下来他就告诉你要写个conflictf,创建一个conf对象,然后这个conf告诉人家是集群,还是单击添加这些节点,或者你直接写一个样本文件都可以。第二个呢,创建这个written的实例,对吧,同步或异步的你自己去开启,然后呢,这些这些都可以好。第三种得到concuent map对应的实现,暂时我们用不到。那么第四步你看get ready base实现这个,哎,这个是不是跟我们相关,所以我们引入以后,最终我们用的是这么一个东东,OK,它有好几种引入的方法,我们现在中规中矩的先用第四种,好,那么接下来同学们自然而然它会告诉你需要有个什么new config,那么这个config就是red sun,你要告诉我连哪台机器的哪一个red实例O了,那么同学们开工回到这呢?我们。
04:00
配置呢,Red can统一的写在这个里面,那这个呢,Write temp不再废话了,OK开,那么public,我们这儿呢是register register sun,然后register OK,搞到这相当于说把这些配置啊,这个看F,严格呢也将它注入容器,统一纳入到容器管理好,你要看FOK好了,那么有这么一个看F啊,完全跟官网的这个案例是一样的,拿过来一拷贝就行了,那么这个conf自然而然想一下我们怎么连我们的red单机的。啊,现在我们先说单机版啊,待会再说多机,那么是不是要告诉他地址啊。哪个库,然后呢,反问REDIST6个一的密码,所以在这儿弹这个,我们呢,Use,那么在这这单击还是集群先单击,然后呢,Sat ADD DD这个地址啊,那么同学们这个没问题吧,那么请看啊,这个是它的这个地址啊,我们来偷个懒,就不写了张过来,那么这个地址啊,弟兄们,杨哥的机器地址是192.168.111.185,然后是6379 OK,好,有它了以后再设置我们的date,你是几号库,Red是不是有16个数据库,我们是零号库,然后再set什么东最重要的是不是我们的password呀,否则它是启动不了的。好了,那么这个看配置完成,那么接下来是不是就要跟我们这儿一模一样。
05:53
来它这是不是有创建这么一个red sun这么一个东东,这么说能跟上好同学们啊,相当于说我就不想写一些代码,每次要去写,我把它封装进我们的配置类里面,那么这就是red sand create can好了,那么这儿return好前置类型转换一下搞定,那么也就是完成了我们第二步red can对应的配置添加,那么第三一步,那么同学们这是几,这是不是8.0版本的代码呀,那么注掉。
06:29
我们接下来呢,玩的是或者留着吧,反正我不反问他就行,待会我们在CTRLL重新写一个方法,对吧,这是8.0的,好,同学们拿过来,那接下来我们写的这个版本呢,就是9.0的,OK,引入READY3对应的官网推荐redlo算法实现类好了,一粘贴好了,那么我们该怎么完成呢?这个self改吧改吧,这个方法那么就是by register s弟兄们,没问题吧,那接下来你要引入这个就跟前面一样,我们呢,一样的道理。
07:20
然后引入哪个private register OK,那么也就是相当于说你这儿一旦注入以后,由于我前面做了这个配置啊,它就知道该去哪台机器上去找对应的red分布式所好了,那么弄到这了以后,在这块没了,改为什么呢?那么是不是我们的write sun.get lock好,同学们来自于哪?是不是来自于我们的第四部这样的最经典最规规矩矩的这么说弟兄们O不OK,好吧,那么这呢,直接拿过来来,同学们,只不过啊,我们这个redk look粘过来,我们这个叫什么?是不是严哥的石有的red洛克这把锁O吧,那这个名字呢,我们就red还是叫red。
08:20
洛吧,这样好区分一点,那么write some sun,洛第二洛克弟兄们好不好勾到这儿,这是tryy catch finally,那么其他的没什么变化,那么这是不是就是我们的unlo克,好,同学们现在是不是新写了这么一个方法,拷贝过来po文件,Red can配置第三步,Service业务逻辑类,那么controltr了,就是减一个,这个不用多说了,说白了就区别就在这,那么在这块的话,是不是就是我们获得我们的锁,然后lock按lock,其他照旧,那么最终我们来到这儿,我们现在的这个方法是不是好不翻过来,现在呢,这个方法呢,就叫这个好了,那么同学们那方法名我们呢就叫这个,那这个就是扣减库存,然后这个是写到这吧,一次卖一个,其他没什么,也就说一样的。
09:20
再去调我们的cell by red sun OK,好了,弟兄们,搞到这,从现在开始,我们再也不用自己手写red分布式组了。好,同学们,程序已经写完,接下来进入我们的测试啊,那么单击和解米塔压测,我偷过了,直接用解米塔压测,因为解米塔高频发,下面的测试能通过,单击100%能够通过,所以启动一下我们的解密塔,等它启动完了以后,那么同学们我们最后捋一下,过过我们的程序就四步,第一步main po,引入我们的JA坐标,Write sun,第二步write con figure,这直接告诉你write sun,你要在哪一台机上面建立red分布式所,OK,杨哥,这是为了讲课,没办法,我们的库存和red分布所都是同一台机器,那实际工作当中,聪明的各位同学你们也清楚,尽量的是不是让业务上的这个red库的IP和我们专门做red分布式锁的机器,最好是分机房,分不同的机器,哎,对吧,不然的话,如果它宕机了,它这个是不也就宕机了,所。
10:34
最好这两个不要在同一台机器,这是第一点,那同学们我们我当然我们这讲课啊,就你也清楚了,就无所谓了,那么好,第二个我们就controller调service,那么这个service也就是我们之前所在8.0的基础上修改为9.0,引入了我们的RED3,那么这个就是和这个是挂钩的,就告诉你这个red s哪一台机器上面做这个red分布式锁,然后中间这我们写完了,不再用我们自研的,直接用written sun OK,下面串基本上呢,啊,这由于从这个8.0版本拷过来的话呢,有一个,但是8.0版本为了演示这个呃,自动续期,所以说这儿故意停了120秒钟啊,那么现在9.0版不需要这个了,删掉,那接下来就会变成我们最经典的获得锁,解除锁好,那么同学们这个搞定,那解密塔也已经启动了,我们接下来呢,微服务先给它启动。
11:34
然后完了以后解密塔呢,我们找一个我们的写好的一个包啊,也是我之前做好的,从2023拷过来的,那么这个就是来开始测我们的right散,和之前的一样,同学们还是5000个请求,完了以后呢,那么同学们在这块聚合报告清一下,什么都没变,IP和端口唯一的访问地址就是把CTRL栏那直接呢修改一下就OK了,好吧,那么来同学们那么不废话,现在呢,后台也已经成功启动,那接下来我们呢,直接在这大家看一下数据呢,也已经给大家准备好直接压测,来同学们请看后台。
12:19
怎么样,是不是开始不停的在。卖出我们的商品对吧,然后来扣一这个没问题吧,It get work,那么来这个red look行不行呢?那么同学们是不是有的时候就是有没有的时候咱们就给它删除对不对么?同学们lower在这块red sun,那么欧拉他自己去构建你对应的UUID来同学们王华好了,最后弟兄们多少零,那么在这块是不是代表我们的程序测试通过呀,来。这么说弟兄们O不OK,好了,这个就可以获得我们自己所编写的测试内容,那么接下来同学们我们思考一下啊,真的是高枕无忧吗?
13:14
那么对不起,这儿还有一个隐含的bug啊,那杨哥这这这说的就有点过头了,这个是咱们用的是对吧,官方推荐的,算了吧,不在咱们自己写了,这么说听懂了吧?那杨哥你刚才已验证测试通过了,没有什么bug呀,那么在这对应的仓库值卖空了,对应的red分布式锁也迪delete塔删除了,这不一切和谐吗?那么还会有什么问题呢?那么同学们听好,在这块官网上也许没有给你特别的指出,但是我们在实际的工程当中,你这一次5000个没出事,但是跑着跑着在极高的并发下面,我们会碰上这么一个bug,他会告诉你attempt to unlocklock尝试着去解锁某个锁,但是呢,发现这个锁不是当前线程所持有的,漏的ID就是我们的UUID加这个线程编号它不对了。
14:24
啊,那杨哥这是官网推荐的呀,难道还有bug吗?他这个用法上他没跟你说清楚,那么来自于我们的工程经验,我们需要把我们业务代码改为9.1版本,再进一步进行升级,那什么意思呢?参考我们之前的5.0版,这个问题同学们请看,只能删除属于自己的key,不能删除别人的,防止张冠李戴也记这需要有一个判断,然后你才能删除,首先这个锁必须是锁定的状态,且还是要本现成自己持有我才能删除,否则不能删,那你可能说你那杨哥你现你现在演示没出错呀,我告诉你,你可能演示十次啊,甚至上100次都不会出错,但出这么一次错你就死定了,他跑着跑着后,他就会给你报这么一个错,现在是5000个并发的请求,5万个呢?
15:24
并发性更高了。所以说同学们在这块。我们要避免犯这个同样的错误,把我们的程序做一下对应的修改。修改成什么呢?如果write sun lock.is lock,它正在被持有,并且它所持有的正好是当前线程的情况下,你才可以进行unlock解锁。
16:03
听懂了吗?和我们之前自己写的判断,然后再删除,最后改成原子操作是一回事,那你可能会说那这个判断啊和这个删除,它这块给你做了封装,你不用担心,必须是锁定状态,且是自己持有,然后来进行删除,框架底层会给你做OK,所以说它这块的判断和解锁才会是一致的,那么请同学们加上这个,以避免出现这样的bug和后台错误,这个非常重要和关键,OK,好,那么同学们在这块以后,我们不妨呢,最终再来做一下我们对应的测试,好,还是5000个同学们没问题吧,修改完成以后,我重启一下我的微服务,然后呢,清空一下我们对应的聚合报告,等着微服务启动以后,改完程序以后,我们呢再测试一下,好。
17:03
那么同学们,现在我们直接发送5000个请求开高,那么后台慢慢的就出来了,好,如果一切顺利的话,那么同学们我们的应该呢,减到零,完成了我们高并发下面对应的测试,OK,所以呢,这个bug请同学们呢是一定要注意的,OK,好,那么解决方法也给同学们做了详尽的说明,我们最终来看一下,来看大家看现在967了,一直减到零,完成我们对应的程序输出,那么来同学们没有出现任何的问题,好,测试通过,那么从此以后请同学们要明白,要么你用字眼,要么你用我们的9.1这个版本完成我们对应的register分布式锁的加锁和解锁,我们并发测试通过对于我们的编码改造,9.0版到9.1版就给同学们介绍到这儿。
18:02
接下来我们来对red sun源码进行一下解读和分析,那么在上一章的时候啊,同学们可能会有这么一个疑问,那杨哥你手写一个ready分布式所你的思路来自于哪?可以这么讲,就是借鉴了ready它底层的写法啊,只不过我们的写法和套路呢,跟它稍微有一些出入。好,咱们呢,开工第一个任何一个分布式锁加锁、可重入、续命、解锁这四大特征要求你是躲不掉的,那么来看一下它是怎么写的,和我们自己写的来做一个对比和判定,慢慢的提升自己的内功,而不要天天只会做一些增删改查好,那么同学们开工。首先red的分布式锁过期了,但是业务逻辑还没有完成怎么办?可否还记得我们之前所说的缓存续命,自动续期加个中,那么请问守护线程来续命,这是一个不用争议的东东了,我们自己啊,同学们写过,在我们这儿的时候,弟兄们咱自己写的这个洛克,那么来。
19:19
我们在这trylo的时候,弟兄们还记不记得,只要加锁成功以后,我们马上renew expir,你用reet renew或者refresh都可以啊,这三个R开头的一般都是重构的这么一个意思啊。那么接下来我们呢,是这么一个写法,它底层源码也是类似,我们额外起一个线程,定期检查线程是否还持有锁,如果有则延长时间,那么write sun里面也实现这个方案,它使用这种东西叫watchdog,注意面试题里面也会有一个知道这个write分布式所的watchdog看门狗嘛,那其实他就问你的是自动续期,简单一句话就是后台扫描,定期检查,每1/3的时间过去了,检查一次,如果还没忙完,还在持有,加个周,刷新一下过期时间,给它加上续命。好,那么同学们请看,我们在获取锁成功以后,给。
20:20
锁加一个watchdog,这个就是我们的开门狗缓存续命,它会起一个定时任务,在锁没有被释放且快要过期的时候会续期来。弟兄们,这个不是我们胡说八道,杨哥你的理论出处来自于哪?弟兄们回到我们的官网,大家请看第八章,在这块啊,直接给你说的很清晰,如果负责这个分布式锁的re节点宕机以后,那么正好这个锁处于锁住的状态,那么这个锁会出现锁死的状态,为了避免这种状态,提供了一个。内部监控的看门狗,它的作用是在re实例被关闭之前不断的延长默认的有效期,默认情况下看门狗的检查超时时间是多少?30秒钟,那么可以通过这个巴拉巴巴拉来另行指定。好了那么弟兄们这段话来自于这全部的翻译都有一句话,我们现在用了这么一个东东,其底子啊是只要加锁成功,立刻会给我们来一条开门狗缓存续命的功能,给我们加上不断的延长锁的有效期,保证你办完事业务逻辑结束了才删。OK好了,那么理论找到以后,弟兄们验证代码说话一步一步来,首先我们通过WRITTEN3新建出来的这个锁key,比如说是杨哥的三布置锁,默认是30秒钟,何以见得呢?那么弟兄们老E啊,我们这是不是叫writing?
21:52
上lock.java来吧,我们现在呢,回到我们的代码。
22:00
这个是我们的9.1版的最新程序,那么来这是一个洛克,我们这儿获得最左边是个red sun这么一个红锁的接口,好look方法,大家请看这是谁,这个是这个是不是还是我们guc的look,哎,所以说一写锁的规范一定要考虑lock,那么搁到这这个接口同学们请看我们这现在是不是说的是red s lock这个包下面的一点看,好弟兄们请看这个类是不是继承了这个,然后实现了r lock接口,再来看r lock接口是不是继承了lock,那么来弟兄们这个lock是不是就是我们勾UC里面的lock,所以只要你以后写锁一言不合,迅速实现这个锁的接口规范是没有任何问题的。好,我们接着讲,那么搁到这儿以后,同学们请看下面呢,简简单单的来看一下这个类。
23:01
首先任何东西是不是它会有一个构造注入,就是我们的构造参数,大家请看内部的锁的示放时间来搁到这他就告诉你用这样一个控制器,Get connection manager get config,看获得look watch do time out看门狗的过期时间,那么也就说每30秒钟给你续一次期,那么杨哥你怎么知道呢?那么来吧,点开look watch time多少?这个时候同学们能能不能理解了,人家默认的过期时间就是30秒钟,OK,所以搁到这儿,同学们这有个非常重要的配置内叫can f.Java人家给你写死了30秒钟,OK,好,那么默认的这个锁就是30,这是我们的第一步,那么第二个我们前面强调了,人家一点进来,我们一调用人家是不是洛克,洛克了以后进来的是这个方法,那么来。
24:02
来告诉你负一,然后捺,然后first也就没有这些其他的对吧,什么考虑中断这些动作搁到这,Look点进来搁到这,好,同学们进去请看是不是跟我们一样获得当前线程的ID,好,Try acquire尝试去加锁,哎,这个是不是又是有点类似于模拟我们的勾C里面的aqs源码分析,一旦你先写洛方法代表加锁,你要加锁之前它不是马上就加上它有一个尝试,那么看看这个锁有没有人占用,第二个有人占用了。不好意思啊,外面排队去,放到队列里面,AQS里面对吧?如果没有人占药,我自己抢占上去,那么第二个抢占占员还要判断是不是自己的重弱还是自己进来对吧?那么所以说各位同学搁到这儿,我们呢一步步呢找下来,它呢就是这么一个方法,OK,这个方法里面try acquire,这有个try acquire1步的点进来,同学们,这个就是我们加锁的核心关键代码,请听杨哥分析,第一个他这return这个方法,你看try lock in内部尝试加锁,真真正正干活的是这个东东,那么呢,就把我们大家请看这段是不是30秒钟的这个watchog time out传给你,好,这段是加锁成功,注意这个叫future,那么是不是就是我们勾词里面讲过的compatible future异步线程,另起一个,他为什么要这么做,同学们。
25:40
看好我们自己写的时候,大家呢,来看一眼啊,杨哥,我们自己写的这个ready分布式所的时候啊,咱这儿是不是加锁成功以后,咱们自己是不是后台扫描出来了一个自动续命的后台进程给我们加个中,它这块也是一样的思路,在这块是加锁乘空,你请看这儿,Lock acquired,如果你的锁占用成功了,只要这个时间是等于烂的话,过来schedule exp renew,我相当于说在这块也就是我们所说的刷新过期时间自动续命,所以一样的思路,这是加锁,这儿是缓存续命,好那么同学们这个呢,就是我们的第二步分析,Write sun lock.java lock try acquire,然后再到这儿,那么请。
26:40
看好,在这块点进来,其实到这儿它的加锁的逻辑会进入到这么一个动洞,在获取锁成功以后,符合条件就是lock acquired的话,会进入这么一个动作,这是加锁,这是给你看能稿缓存续期,好了,这是我们的第二步,那么第三步同学们,我们呢,不妨呢看一下代码,再来看一下笔记,先说加锁,后说刷新缓存过期时间点进来,弟兄们自行看一眼,请告诉我熟不熟悉啊,原来我们所谓的written sun人为了保证这种原子和不中断底子啊,也是用路R脚本所写,无非在这儿就是那个什么我们的各种的key,然后呢,现场ID等等,那么主要就是这三段的业务逻辑,好,同学们给大家一点时间,我先暂停一下录屏,自己看一下能不能看得懂。
27:40
那么同学们来吧,我相信这段源码同学们给了大家点时间,大部分都能看懂吧。好,来给大家呢,都整理好了三段,红色,蓝色紫色走起第一段如果锁不存在。
28:04
我们去看看等于零,则通过h set设置它的值,注意在新版本的WRITTEN3里面,它把它改为了h inqui,如果你是看老版本的,就是说你的版本号啊,假如说我们现在引入的这个RED3是313这个版本啊,如果是换以前的,那么它这请同学们注意底层源码的话呢,它那个脚本所写的啊,还是用h set,但是呢,我们前面也分析过hh increase by可以等价替换h set,这两个是一个意思,好,这给大家做一下说明,所以这段意思看整体就行了,不存在咱就新建我这个h set,也就等价于这的H盈亏半一个意思,并默认新建了以后是第一次进来,从零零就是没有人抢这把锁嘛,改为一,这个有人干过了,然后设置它的过。
29:04
第时间,第二个如果锁已经存在,并且锁的还是当前线程,则通过H1亏半给数值递增,蓝色这块说明什么?是不是锁的上面红色这个叫加锁成功,中间这个蓝色这个叫可重入性。同学们请看H1亏半是不是这个T,然后呢,标着这一段的那个UUID那些value的值,然后又加一次,并且干嘛给它续命OK,再把这个过期时间再往前重置一下,如果两个都不是,如果锁已经存在,但并非本线程,那对不起,则返回过期时间,就是给你给你一个这把锁还有多久时间过期TTLOK,好,那么同学们这块源码分析的解读就这么一段,两段,三段,这是它加锁逻辑,OK,好,那么同学们来还不懂,我给你总结好,通过这个来判断不存在新建设置值和过去。
30:04
时间加锁成功,通过这个判断,如果锁已经存在,那么也就是你看先用这个啊,再用这个,如果锁已经存在,并且锁的是当前线程,则证明是可重入锁是重入的,这个指把锁加锁成功,最后如果锁是在,但是呢不是我自己的,则证明有其他线程持有锁,我只是返回这个锁的过期时间代表锁K的剩余生命。时间加锁失败,OK,我没有干别的了。好,那么同学们,这是我们的第三步,那么接下来弟兄们,咱们是不是要回退到我们的程序来唠唠我们的什么对应的?我们的看门狗这个东东呢,哎呀,找那么半天重新来吧,那么来弟兄们,我们搁到这儿,回到我们的writing sun,回到我们的这儿,再来一遍吧,回到我们的这儿,回到这,回到这儿,接下来弟兄们咱是不是要来唠了这个东洞了,那么通过上面加锁成功,你看它在它在这块是不是on complete,就上面只要加锁成功一完成,我马上起个后台的线程来进行看门狗程序的延续。那么来弟兄们老眼,这个其实底子第二的是你看renewpiation,来重新刷新一下我们的过期时间,跳到这儿,这个是干的方法,巴拉巴巴拉一大堆,重点核心是它,那么在这块进来,重点核心是这大一段,来同学们请看啊,我们先看大家熟悉的这个咱们有没有写过。
31:45
这个没问题吧,那么现在是不是就是它是30秒钟,是作为我们的这个watchog他们out的超时时间,对吧?那么现在就告诉你这个时间除以三,那么是不是每过十秒钟以后给你加个钟,你看res schedule itself,造还是这么个动作,弟兄们能跟上吧?好了,那么同同学们通过这些源码的解读,我们来看一眼啊,它这段的意思呢,是这个里面初始化的一个定时器,这个底内的延迟时间是这个的1/3,那么在WRITING3里面,这个动刀前面说过了,是30秒,也就是30除以三,不用严格解释了吧,对吧,也就是每隔十秒钟续期一次,续一次又把它打到30秒,OK,这个回答我是不是跟我们自己手写red分布式所的思路是一样的,哎,其实杨哥也就是看看源码以后借鉴了他的思路,OK,好,那么当然啊,人家是大神专家。
32:45
肯定比杨哥写的好点,我也是这个,呃,借鉴了一下,抄袭了一下,OK,那么好,所以说这个就是watch多的自动延期机制,那么来吧,搞到这加锁成功就会启动一个卧度开门口缓存续命,这是后台每隔十分钟检查一下,OK,那么每次就这么一个这好了,那么接下来我们已经明白了这小段,那杨哥他在这块。
33:12
老爷。我们这个续命的时候,弟兄们我们怎么写的,是不是也是我们对标我们自己写的话,我们在这块告诉我们,咱是不是底子是用这么一套撸R脚本呢,对吧,那么它呢,所以呢,弟兄们搁到这儿点开,大家呢再点开回到这儿了以后我们呢,简单的来给大家呢,看一下在这什么意思啊,杨哥怎么点来点去的,还是在这儿啊,不是个意思啊,我躲到这如果过期时间以后,是不是要被就像是依符这个条件判断拉回来再来执行这方法调用方法递归一样的,那么它中间执行是跑什么呢?这个是啊,大家看这是不是有个这么一个动作,所以呢,传进去连线场ID来点进来,同学们老有没有看到撸R脚本了,那这个时候我相信我们自己都写过这段,马上就秒懂吧,所以呢,弟兄们粘出来给弟兄。
34:14
来做对应的分析,存在的话干嘛?咱们是不是就expiir缓存续命加个中RETURN1乘功end,否则的话RETURN0不是自己的续不了,OK,所以弟兄们这个就是我们的第四步,看完后缓存续命脚本和源码相关的分析好了,那么最终咱们用完了是不是应该是按洛,那么搁到这儿还是跑到我们的ready sun lock这那么这儿是按lock get的话,那么按lock得到这个方法点进来,那么弟兄们来接下来给我们干活的是不是也就是这一段脚本所涉及的相关内容和东东啊,这干活的按lo克实质底层而言,大家请看都是按照异步线程,这是不是有个unlo克的内部的这么一个解锁的东东点进去,来第。
35:14
兄们是不是又是一大堆乱脚本,那么来吧,哎,我都不想说了吧,看看存不存在等等,所以呢,弟兄们老规矩三段法给同学们整理好,因为都带着大家写过了,咱们就简单的过一下,首先存不存在等于零的话,那就没什么好说的,你等于零根本就没这把锁,你让我怎么解锁?如果示范的锁的线程和已存在的锁的线程不是同一个等于零,返回那红色第一段,蓝色中心这一段,那么它占在logo,这个意思就是定义了一个本地变量啊,那么呢,它这直接调用,如果是,那么也就是等于零,是进红色框框这个如果不等于零,那是不是等于一,等于一说明已经存在,存在的话我要解锁,那咱们是不是前面说过lock几次叫unlo几次加锁和解锁要对应起来,所以通过H1亏半递减,一个一先释。
36:14
放一次锁,若剩一次锁还是大于零,那么则证明当前的锁是重入锁,刷新这个过期时间,哎,所以说在这块蓝色的是这么一个态度,最后紫色的呢,If这块LA若剩余次数已经小于零了,说明安洛克到零了,删除key并发布。所释放的消息,Delete publish OK,你看解锁成功,所以我们的安洛克方法它是这么来的,那么弟兄们就是这一段,这一段这一段OK,好,弟兄们所有的源码分析就三段分析法都给同学们讲解清楚,OK,那么这个就是我们RE3,它如何完成了加锁,满足了可重入锁的特性,如何续命,如何解锁最重要的锁的四步原则。
我来说两句