00:00
接下来呢,我们就参照啊rein lock中的非公平啊,可重入所那么来去实现我们的分布式啊,这个可重入可重入可重入锁啊,当我们也是非平名的。啊,因为是实现公公平的呀,就相对来说呢,会比较麻烦一点。那为了简化处理呢,我们就实现一个非公平的,因为呢,非公平的已经是比较麻烦了啊。啊,那么他怎么去实现呢。啊来看咱之前呢,已经有这个KV结构啊,那么K的话呢,咱是争抢对象,那通过对loft的争抢,对这个K的争抢,来做到一个独占排他。那么然后呢,通过这个value来记录这个线程的唯一标识来是否自己的锁。啊,通过线程的唯一标识,那就标识的啊。哎,那么我们现在要实现可重入锁,我得要记录当前这个线程重入了几次呢?
01:02
那每重入一次,我进行加一,那每入一次呢,我进行加一,每释放一次,所我要减一,当减为零的时候,那我才能把这个锁呢给抵赖的掉,那给删掉。啊,那我怎么知道重了几次呢?我们也需要记录下来。那么借助于现有的咱们这个数据模型。那么怎么记录这个宠物次数呢?当然有同学说呢,我可以在UID后面我拼个字符块,比如说我就拼一个冒号,然呢重录次数,哎,我重录了一次,我获取锁一次就来个一,那每重复一次呢,我就在后面去加一个一就可以了。但这么写呢?啊也能实现,只是呢,实现起来呢,会比较麻烦啊。好,那么在咱里面,咱除了字符串这种数据模型之外啊,我们现在使用的是字符串这个数据模型,那么还有其他几种模型的。我们知道呢,常见的啊,有五种数据模型。
02:02
那么有一种数据模型呢?实现起来就会比较方便,那就这个哈希数据模型啊。那么哈希数据模型啊,他在我们的Java里面类似于双层麦。那那么外的话呢,就上一个Y层的T,那比如三可以lock作为外层的K。那么内存的话呢,也是一个map啊,然后呢,咱可以以UID那作为内存的K,那么以重入字数来作为那value作为内层map的value,它就可以了。好,那么咱去演示一下这个哈希数据模型啊。那么打开我们这个ready,那比如说呢,我要操作哈希数据模型,我去set一个数据,那怎么set呢?在那来一个h set。那它这个是H在哪啊。因句环呢,有这个Y层的K啊,有这个field,然后有值。哎,它也类似于我们的这个对象,比如说呢,我有一个U的对象,那有对象呢,我可能会有呃耐这样的一个字段,然后呢,它的值是多少。
03:07
那么可能还有一个A级字段,那么这是多少?那么这个U字呢?就相当于这个Y层的K。那么这个呢,Name和A呢,就相当于内层的这个K啊。然后这是内存那个Y6。啊,你可以认为双层麦风,那么你也可以认为呢,是一个对象,那都可以。那大可以演示一下看看啊,我来I set,比如来一个user,可是name。比如说就来一个啊,来一个柳岩。好,那我一会车。哎,什么情况呢,来一个啊柳岩,那我一会撤。哎,设进去了吗?啊,设置进去了,大家好像看起来有点。有点不太对哈啊,咱先不管它了啊。那我再来一个啊,H he set,咱们是U的A等于20回回串,这也设就好了。那么设置好之后呢,我们可以找一个red客户端来去观察一下啊,看长什么样子的啊,打开一个客户端。
04:04
那我这个客户端呢,那你们呢,也可以自行下载一下啊。OK,那我们这里呢,嗯,就不发了啊,我相信很多同学应该都有啊,只要玩过的一般都有这个客户端啊。啊,或者没有的话,你可以到网上去搜一下。好,那么比如说呢,我这有一个U的,它这是Y层的K。啊,或者说是那个对象名。让内层也有这个name和age啊,由于呢是中文的,所以这里显示呢会有一点问题啊,那柳岩呢,也编译过来了啊,是显示柳岩。那么A应该是20。你可以认为这是U的,就是一个对象名啊,是U的,然后里面呢有map age2个字段,然后有定等值,你也可以认为这是一个双层map啊,这是外层map的这个K。然后这是内层map的这个K,然后这是内层map的value啊都可以。那么下来的话呢,我可以呢,以lock那作为外层这个K,那么以UID啊作为内层的这个K啊,然后呢,以谁呢,以我们的重录次数做一个value,然后呢,保存到这个内存的value value里面去。
05:15
差就可以了。好是咱们这个,呃,总体思路。那么一说,如果我要去实现可重入的话,那我们就要借助于他呢,借助于哈希数据模型了。那必然我们还要记住于撸啊脚本,因为在操作起来呢,就会比较麻烦,但是需要多个指令配合才能实现啊。那多个指令配合,那必然我们就需要卢瓦脚本来去保证原子性。
我来说两句