00:00
现在呢?我们来看一下red中的第三个锁连锁。那么基于的分布式连锁对象,那么可以将多个ILO对象关联为一个连锁。每一个lo对象实例,那么可以呢?来自于不同的reducing实例。有什么意思呢,就是首先我们得要有三个red服务器啊,Red服务器或者三个release节点。那么然后呢,我们要有对应的有三个red实例。这实例啊,就像就是那个ing cleanlin啊啊,比如说我有三个RA cleanlininglin 1ing cleanlin2 cleanlin3。那么然后呢,分别从这三台ready里面有火因素。那么这个锁的名称啊,最好呢,是一样的啊。那么然后呢,咱们就获取了这个三个lock锁对象,那么三个lock锁对象咱可以通过reding multi lock这里一个玩意儿,把三个锁定向呢给关联起来。
01:05
然后呢,我们可以调这个连锁对象的加锁方法以及解锁方法。那么什么时候能够加速成功呢?你看所有的锁都上锁成功,那么裁判成功。那也就是说,如果有任意这个release或许锁失败,那么咱们这个连锁呢,就加锁失败了啊。所以呢,你会发现呢,这个锁呀,其实很垃圾,为什么垃圾呢?任何一个宕机了,那咱的所能都不能用了。那对它有什么意义呢?那还不如单台release呢,那单台release宕机,哎,有可能,那么你三台release宕机的话呢,可能性反而会更高一些。任何一台服务器宕机,那么连锁都不能用了呀。所以这个玩意呢,就当它不存在就可以了啊,不要去玩它。好,那么然后呢,我们来看第四个锁,就是这个红色了啊,Red lock。那么基于red red红锁啊,Red。
02:03
Readlo对象,那么也实现了,他实现了readlo介绍的加速方法。那么这个red lock算法呀,就是我们的官方提供的一个页面啊,你点进去它就跳转那个跳转到那个页面了。那么这样的话,咱就不再看那个红色算法了哈。那么该对象也可以用来将多个ILO对象关联为一个红锁。那每一个I love对象实例来自于不同的reducing实例。那么啊,也是有多肽ready啊多肽。那么然后呢,我们这里有三个客户端,那么分别呢,从不同的release里面来去获取锁。那么会到三个锁,那么这三个锁呀,咱可以通过red readlo把三个所呢给关联起来。那么这个拉锁呀,就是一个红锁对象了啊。那么然后呢,通过红锁对象里面的log方法来引加锁,通过n log方法来进行解锁。那么它比我们的连锁呢,要好很多,好在什么地方呢?好在它大部分界面上加锁成功,那么就算成功了。
03:09
就只要半数以上加锁成功,那就算加锁成功了。那么跟我们那个红木算法呢,介绍的啊相似啊。它那么是咱们这个红锁这个东西,那红锁这个东西呢,也了解一下就可以了啊,那么企业开发里面真正使用红锁的,嗯,寥寥无几啊。OK,那我们这边这里的话呢,咱就不演示了,因为呢,咱还需要多台release服务器。啊,没有必要啊。啊,了解一下。那么然后呢,我们来看这个读写所,那读写所呀,它是基于ready分布式可重入读写锁。叫I read write lock啊Java对象,那么它实现了JC里面的read write lock接口,就读写索接口。那所以的话呢,它的呃,底层原理啊,它的工作原理呢,跟以前我们那个读写索的原理是一样的。
04:03
那么以前那个多色的原理怎么回事呢?好,我们来去简单的去看一下,那么首先呢,写和写怎么样呢?写和写呢是不可以并发的。啊,不可以并罚。那我们这个读写可不可以并发呢?那读写呢,也是不可以并罚的啊。OK,那么如果血和血并发的话,就可能会出现并发安全性问题,比如说呢,在那个超慢现象,那减固存就是血和血。啊,冲突了呀。那么毒和写也为什么不能并发呢?那么读和写不能表达原因啊,是因为我在写的过程中,如果你去读的话,你可能会做一些脏数据。OK,那么这个呢,也是不可以引发的啊。那么然后呢,毒和毒啊,会有安全性的影响吗?啊没有什么影响,所以呢,毒和毒呀,它是可以并罚的啊。那么有同学说了,那么这个有的可以并发,有的不可以并发,我使用读写所干嘛呢?
05:06
我能不能就使用普通的那个锁呢。如果K并罚的话,我不加手臂行了吗?比如说这个读,咱应该有两个方法,肯定有一个读的方法,假如我有两个方法,一个是读的方法,那么一个是写的方法,那么既然读和读可以并发,那我不加氟。不加锁OK,那不加锁不就可以闭环了吗?OK,那么写和写呢,不可以并发,那我加锁不就行了吗?我就使用那个普通的可重复锁,那不就实现了吗?OK,这实现了吗?没有实现。因为呢,此时呀,读和写也可以丙它了。由于呢,你读没有枷锁。那么你在写的过程中,它依然是可以读的啊,因为它不会被堵塞,你看没有所啊,所以就会出现读和写也可以并发了啊。也给丙吧。那么做不到毒蝎所这种效果?啊,读写素也可以做到,写和写不可以引发,读和读可以并发,但是读和写呢,也是不可以引发的啊。
06:04
好,那我们来去演示一下图写手的一个玩法。那么此时呢,我们来去找到CTRL了,我们来去写两个方法啊,咱把这个方法呢,给它copy一下啊,放到下面去。那么这个地方呢,我们来一个test read lock,那么咱的路径啊,我也不需要这个参数了,把参数呢给它去掉。那方法名我们就来一个test read lock这样的一个方法啊,把这个地方变成大写的。那我将来就要定义这样的一个方法,那么这个参数呢,你给它去掉。好,那么然后呢,我们再去定义一个嗯,写的方法,那么这个地方呢,给它改成。Right啊,那么然后下面这个位置呢,给它改成。这个是right lock,诶这应该是。改这个地方啊,这应该是right了。那么它呢,也改成right,那方法名也改成对应的,哎,我有两个方法,一个是读的方法,一个是写的方法。
07:05
那我们在这个service里面,我就创建。这样两个方法。好,那么在这两个方法里面呢?我们来去获取无解索对象啊,Listening raising lock RA clean,点上get read right lock。啊,有对应的方法,那么来命名为I w lock。好,最终呢,咱就可以,嗯,获取。获取一个I w lock对象了。那么然后呢,嗯,咱们这里比如大要去加速算啊,你点上relo.lock来加速。那么然后呢,呃,解锁呀,就I w lock点上readlo.unlock就可以解锁了,那中间你可以一定操作了嘛,对吧,来一个todo啊啊,这个呢是呃一对。一对写的操作啊,一对写的操作好,那咱这就假装已经完成了。
08:03
好,那么我们下面这个呢,也是一样,我们这个呢也是嗯。呃,读写锁啊。那么这个呃,锁的名称必定要一致,如果你不一致的话,还能锁住吗?那就锁不住了啊,这个锁的名称不一定要一致。那我们这地方呢,都叫I w lock,那就可以控制住啊。那么然后这个地方呢,咱们应该是呃,斜索那么点上的RA。点上right right lock。那么然后这个地方呢,也是一样,嗯,点上rightlock,点上unlock来解锁好这一顿写的操作。那这应该是一对读的操作啊,要不写错了,应该是对读的操作,那么这样两个方法单写完之后呀,那为了方便测试哦,我们不要去手工解锁了,我们可以这样子。给这个锁呀,咱指定一个锁定时间,比如咱可以指定为十秒钟,十秒钟之后呢,自动去释放锁啊,那个time unit,点上sentence。
09:07
那么这里面也是一样,我们直接就锁定十秒钟时间,十秒钟时间之后呢,它会自动去解锁,点上的C锁好,我们已经写好了,写好之后呢,咱们来去重新启动一下。啊,这两个服务啊。嗯。啊,已经重启成功,那么重启成功之后呢,我们在浏览器中,那么来去分别去访问一下,那么一个呢,是访问这个读索,这应该是一个redlo。好,那我们再去打开另外一个客户端,另外一个页面,咱去访问这个解锁。啊,来一个。Right lock,好,我们来去看这个读索啊,往这一走,因为它可以并发,我去刷新刷新刷新刷新,可以一直并发啊,那么此时我来写会怎么样呢?那血呢,就会在这里一直刷新着。
10:04
等我们那个毒所释放掉了,那么这个血呢才可以进去啊,你看他刷了半天。那刚刚写完我又去写会怎么样呢?他也会要,他要等上一个写索释放掉了啊,才能去写啊,也会在这里刷半天,也在一里刷啊,写和写呢是不可引发的。那么读和写也是不可以引发的,我读完之后立马去写,那么写呢,也会被阻塞住啊。那我写完之后立马就读呢,可不可以呢,也不可以,那读呢也会被堵塞住啊。好,那这个读和读呀,是可以隐藏的啊,比如说我这读完之后,我立马去读,立马去读,立马去读是可以的,但读完之后再去写呢,是不行的,又被阻住了。那里面它怎么去保存的呢?我们可以去看一下啊,要有个I lock。因里面呢,有一个model是read,那里面这个读索啊,它是可以有多个读索的啊。啊,同时可以存在多个。但是斜数呢,只能有一个,比如说到此时啊,我们这个地方呢。
11:04
好,来去看啊,再去写一下,来去写写,那我写完之后立马就写,会有写吗?没有写。因为里面的话只有一个写索啊,因为model是right的时候,咱们这个写索呢,只能有一个,当model是read的时候呢,咱可以有多个读所在里面。那么其实呢,咱们读写锁呀,我们使用呃落脚本也可以自己去实现,它就多了一层判断嘛,它的这个model类型啊。如果你读的类型的话,那你若是读的操作,咱可以再次进去啊,那如果你是写的类型的话。那么任何操作都不能进去了,他必须得要独占。加电路的。它是咱们这个读写索测试已经测试完了。
我来说两句