00:00
接下来呢,我们来去回顾一下red,那么red啊,它本质是个什么东西呢?哎,不要直白的把它翻译成red的儿子。那么它其实呢,本质是一个ready的Java Java客户端,那内部呢,可能提供了大量的一些功能封装啊,其中就包含了分布式锁的。分布式锁的功能症状。那我们这边主要就玩的分布式数。那么啊,当然呢,在实际开发中啊,我们使用re的话呢,不止是不止是这些哈。但我们这里的主题是什么呢?就讲所。好,那我们这个该怎么去玩啊,咱的玩法嗯,一共呢,是这三个步骤啊,第一步呢,我们是引入啊依赖,那么一种依赖之后呀,我们就有的价包了。进而呢,我们才可以使用里面的啊API功能啊。好,那么这个依赖坐标你可以从官方文档里去拷,那么你也可以呢,从M的中央仓库来去搜索。
01:02
啊都可以啊,那么然后呢,咱第二步,第二步啊,我们就是一个Java配置类啊,Java配置类那我们是叫这个readying啊,这conig conig这么一个配置类,那这个配置类里面主要是有一个it b啊方法,它可以呢,帮我们去初始化一个reding啊的对象啊reding就是clean clean好那么这个方法里啊,我们主要是有两个东西。啊,一个呢,是一个配置类啊,来一个comp个配置类,那么有一个配置类,那么然后的话呢,我们还可以通过这个配置类来去初始化啊一个RA。那出发这个ready,我们是有一个,呃,第二个API什么东西呢?就是我们这个ready啊,就叫ready。还要点上啊啊就可以了,那把这个配置类啊给它放进去啊就行了。
02:03
那么然后呢,我们这个配置对象上面啊,我们又配置了一些一些参数,比如说呢,我们首先来去配置了,呃user single啊single前面是server,就单机模式,我们可以设置集训模式啊,主从模式设置各种模式。那我们使用的是single server单机模式。那么也可以设置很多参数,比如red地址,那么啊,对,那么这个里面啊,我们必须要以red冒号啊,双斜杠开头啊,然后再跟上我们的这个IP地址。IP,然后是加上这个端口号就可以了。那么如果你是多个release的话,那么你最好呢,这肯定就不是单机模式了,那说你不是单机模式的话,那么它是可以配置多个的啊,以多少进行分隔就可以了。好,那么呃,然后咱还有很多其他参数,比如说最小连接数啊,最大连接数,超时时间啊等等等这些参数啊,用户名和密码这些东西。
03:08
好,那我们这里的话呢,就不一一去看了啊。啊,那么咱这个呢,基本配置就这样子的。好,那么然后呢,第嗯三步,我们就是代码的具体使用了。代码使用,代码使用啊,它主要是以那个可重入锁来做了这个入门演示啊。那么可重入,嗯,可重入锁定那个I lock啊,这两个对象啊,它的使用怎么玩等等。我们首先是通过this.ready clean,点上get lock好,然后给锁呢去起一个名字,它将来会以它作为key保存到ready里面去。好,最终呢,会返回一个I lock对象,那么拿到这个lock对象了。那么有了这个lock对象之后,我们就可以来一个lock.lock类加锁,Onlock解锁,那这两个方法呀,也是最常用的一个方法啊。
04:04
那么这个呃,I lock重入锁呢,也是我们用的最多的一个锁啊。好,那么可同锁啊,搞定之后呢,我们也讲了这个公平锁啊,公平锁,那公平锁呢,我们的玩法呀也差不多啊,类似点client点上get,嗯,是fair alo,那么这里面咱也给它起个名字,那它也会以它作为key保存到里面去啊,那最终返回的啊是也是一个I block对象。啊,ILO对象,那么这个公平锁呀,它内部呢,有一个排序队列啊,那么所有请求它会按照先后顺序,然后放到队列里面去,那么先来的请求先后一道索。啊,先来先得嘛,啊拼的是速度啊,谁的手速快,谁的网速快,谁先抢到我们的商品啊,在如果在秒杀里面来使用公平锁的话啊。OK,那么然后呢,咱们这里面啊,去加锁呢,也是一样的啊,通过lo方法,那么来去加锁,然后再通过这个onlock方法来解锁啊,这是共平锁,那么然后呢,我们呃,还去玩了一下。
05:12
啊,这个啊,连锁连锁和那个红锁啊,我没有玩,我们是稍微介绍了一下对吧,连锁和这个。红锁啊红锁那连锁呀,其实很垃圾,它需要所有的类似基点都获取锁成功,那才能获取锁成功,那这种情况呢,很难满足啊。啊,或者说呢,他这个失败的概率呢,有点高。那么红色啊,是半数以上几点,护理所成就可以了。那么这个呢,它实现了红薯算法哈,那红薯算法呢,我们也做详细的一个介绍,那么你们呢,哎,可以呢,应该可以跟面试官好好去聊一聊啊。那至于底层实现啊,你可以呢,有兴趣可以去读一读啊,那我们这的话呢,其实啊,没有必要,因为根据现在市场来去看啊,红锁呢,用到的并不是很多。
06:01
那如果我们呃,有幸还能出第二季的话,我们可以呢,去实现一下红锁,那么然后呢,去看看类的红色怎么实现的啊。那我们是,嗯,可能会有这样的一个机会啊OK。那么然后呢,我们来去看这个,嗯,咱们后续讲的一个读写所啊,读写所,那读写所呀,我们的玩法呢,是this s.ready。那么点上get,点上get read right啊lock,好,那么这个里面啊,我们也可以给锁呢,去起个名字,它会以它作为K发存到red里面去。那么最终返回的嗯,是I read write lock,讲的是I wlo这个玩意。那进而呢,我就可以进行加锁和解锁啊,那么你加锁和写锁呀,它有呃两个锁啊,一个呢是无锁,你加什么锁,你加独锁还是解锁用掉来一个relock啊是加读索哈啊来一个lock方法啊,就可以加读锁了,通过unlock就可以解读索了哈,那么然后呢是I w lock,那么还有什么,还有写索rightlo,那么然后呢,是啊lo,然于是onlo这个东西。
07:19
那读写法呀,我们重点要理解,那读和读是可以并发的,那读和写呢是不可以并发的,写和写呢也是不能并发的啊。那我们也去演示了这样一个现象。啊,东蝎所下它底层呢,其实啊,也并不复杂哈,它加了一个model这么一个玩意儿啊,如果你这个model的值,Model的值是right的情况下,而是right的情况下,它是不能并发的。如果你的model值是read的话,哎,那么读和读呢,是可以引发的,我可以再放另外一个读进来。好,咱们这个读写所。好,那么然后呢,我们又去嗯,讲了一下啊,咱们那个信号量啊,叫信否信号量,信号量,那么信号量呢,我们也顺带的就回顾了doc里面的信号量啊。
08:07
但是呢,我们不可能每一个细节都回顾到。那么咱嗯,这个分布式所呀,说白了呢,你得要有一定的guc基础啊,才能听得更加的啊,更加清楚一些。那比如说呢的底层的这个可重入索,那它怎么实现的呢?啊,它底层就借助于那么排包看排头胞认是非,那么结合这个撸啊脚本,嗯,以及呢哈希数据模型能力实现的。那如果你要对卡门飞有浅有所了解的话,那你可以跟面试官好的就吹一吹了啊,吹一吹它里面的一些方法啊,吹一吹他他的一些使用。啊,那么像卢瓦脚本呢,咱们也已经讲过了吗?啊哈,一数据模型它怎么设计的?你也好好聊一聊了,但如果你要是没有guc基础的话,你可能对这个东西呢很陌生,你最好呢就不要提这个东西了,你可以简单的去说一下撸脚本的啊设计,以及呢汉语数据模型的一个传递。
09:06
OK,那么然这个信号量,信号量呢,呃,咱们这个玩法呀。我们回顾了GC个信号量啊,代码回顾了一下,那么然后呢,咱重点是讲是ready这个信号量。啊,Red的信号量啊,两个玩法呢,其实嗯,都类似啊,先通过这个客五端来去初始化一个信号量啊S,那么然后这里面呢,也要给它指定一个K啊,那么这个K啊,嗯,就是我们的唯一标识啊。那最终返回了一个I啊,Same for啊,原来是same。啊,这样两个对象,那么我们呃,怎么去玩这个S呢?啊,Sing啊,它里面有嗯这样几个方法,首先我们要有它的一个TRY,然后是set promise这两个方法,你可以设置一个。啊,是设置一个资源量啊。
10:00
那比如说呢,我们可以设置一个三这个资源量。那我每次呢,只会放三个线程进去。那么哪些线程可以进去呢?那看你的这个呃亏的方法啊,有没有执行成功。如果快要成功了,那你可以进入。那否则呢,你就只能在这里阻塞着啊,再个库克方法这个位置阻塞着。那么然后呢,我呃,获取资源成功的情况下,我们将来呢,执行完了,你再去释放资源啊,通过类似啊来去释放资源,让后续请求那么可以进来。那么最后一个呢,我们讲了这个闭锁啊,闭锁也可以翻译成倒计数器啊,那么这个英文呢,它是那个康当垃。那我们也回顾了GC里面的抗垃。那么然后呢,在这里啊,我们怎么玩的呢?在ing里面,他们有这个ing啊,依然是raing clean,点上get是count count,当lunch啊这个玩意,那这里面呢,你也给它起一个唯一标识,它会以它作为key,让它反映到release里面去。
11:05
那最终返回的也是一个I can't嗯,Down,然后是拉好,那CDL等于它吗?那么然后呢,我们在这个地方呢,是有一个CDL点上,然后有一个try sit count count这样的一个方法,那在这个方法里面,我们可以设置一个。啊,等待的一个,嗯,线程数啊或等待的这个事件数。啊或指定一个初始值。啊,那么我们嗯,可以通过CDL点上a wait可以阻塞某一个线程,阻塞某一个线程。那么然后呢,呃,我们,呃,其他线程啊,在执行完的时候呢,我们可以调调一下这个抗大,每调用一次,但初始值呢,会减一,减为零的时候,这个被阻塞线程就可以放行了。那我这个被阻的线程要等几个线程?
12:01
啊,执行。或者执行完了。啊,我们这是一个数值,这个值呀,就是我们要等待的线程数啊。等待的事件数,或者说事件数,或者说啊,OK,那我们嗯零啊就这些东西。啊,倒计数器啊,信号量读写锁,公平锁,可重入锁。好,那我们。
我来说两句