00:00
那么分布热索呢?我们有了一个简单的认识,也知道了什么场景下我们可以选择分布热索。那分勒索该如何去玩呢?OK,那么它的玩法呢,就比较复杂了,因为呢,JDK啊,并没有给我们提供现成的时间啊。那我们必须手写代码可以实现,或者呢,我们可以使用第三方框架来帮我们去实现。那不管是我们首先实现还是使用第三方框架,那么主流的实现方式那么只有三种。啊,只有三种。那么第一种啊。第一种实验方式呢,它实验方式啊,我们可以去呃列举一下,那么分布式所的实现方式主要是这三个实现方式,第一种呢,我们可以基于release,咱们来以实现分支。那么第二种呢,我们可以基于zoo keep来去实现分热索,或者呢,是啊etcd啊这样的一个东西,那么来去实现它也是一个类似于主K的一个东西啊。
01:09
OK,那么第三种实验方式呢?我们可以基于my circle那么来去实现。就是独占排他使用。那么什么意思呢?比如说呢,我有很多个请求,那么同时要去操作一个共享资源,那咱应该怎么样,咱应该先去抢锁。那么强盗锁的这个线程,它可以呢,去操作我们的共享资源,那么操作完了把所释放掉了,那我的后续请求,那么它可以呢,依次去获取锁,那来操作这个共享资源。啊,做到独占排查使用吗。那么在release里面怎么做到独占排他使用呢?好,咱可以利用里面这样啊,这个指令呢,是这叫啥呢,叫set X指令,那么这个指令呢,有些同学可能有点陌生了,那陌生呢不要紧,我们呢应该对S的指令不陌生啊。
02:05
那比如说呢,我来一个set t然是V。那么在这个时候呢,它设置成功了,那如果再来一个set,当然是T,那是V2,它会怎么样呢。它会把K的值给我覆盖掉。好,我来我来就回车也依然可以设置成功啊,OK了,此时我来get,那么K1的值多少呢?是V2了啊,就第二次会把第一次值给覆盖掉。那么呢,塞塔AX它呢,类似于sat塔,但是又不太一样,那我们知道sat的作用是什么?还可以给某一个K来设置一个值的啊,设置一个KV结构到这类里面去。那么SX也是一样,它也可以设置一个TV结构到我们的里面去。那比如说呢,我来去set一个,我随便搞一个啊,比如来一个lock这玩意。
03:00
那么值呢,我都随便写,我又来一个一一。那有没有设置成功呢?已经设置成功了,反义词呢,是一。那我再来给执行一下set X,你就来一个lock,然是222啊这样的一个东西,哎,它能不能设置成功的。啊,我一回车你反应值是零啊,一个是一,一个是零,零呢就代表设置失败了。那么此时我以执行GA的指令,查看log的值是多少。哎,它值多少呢。是一一呢还是二呢?好,我们回车看一下,应该是一一的值。那么X咱就可以理解出来了,它什么意思呢?就是当lock的值,当这个K的值不存在,我才能设置成功,如果存在的情况下。他就设置失败了。当不存在我才去设置。那我们可以想象一下,如果我们有100个请求同时设置,通过同时来执行set X指令。
04:01
那么在P一样的情况下,那么只有几个请求可以设置成功。那么肯定只有一个请求可以设置成功啊。那么设置成功了的,我们可以认为呢,已经获取到锁了,但可以执行咱的业务操作,可以操作我们的共享资源。那么操作完了我得去释放锁,释放锁之后呢,其他气球才能过一道锁呀。那怎么释放锁呢?我们可以执行这个de指令。那我们这呢,就可以让其他请求啊获取到手了。那么第二指令我们可以去试一下啊,来一个Del还是lock,我把这个锁释放掉啊,删掉。删了之后呢,其他请求再去执行set X指令,再来一个lock啊222,那之前的执行失败了,现在呢,我已经把这个lock给删掉了。那么他能不能执行成功了,好,我们来看一下,你就执行成功了。
05:00
那此时我们lock锁的池呀,就变成2222了啊这个词。好,那么也就是说呢,咱释放所可以使用DL指令,那么货解锁呢,可以执行塞的X指令,如果反应值是一,代表货集所成功,如果反应值是零,代表获取所失败。那么霍伊锁失败的请定怎么办呢?哎,比如说呢,哎,我有一个请求已经获取锁货伊锁成功了啊,那呢,咱可以去执行业务操作,那么然后呢,执行完了,他执行这个D要指令把所给释放掉。那么还有两个请求没有回上。所能。那没有回到素的请求怎么办?他可以重试就可以了啊,我在于执行set n的指令。那么直到呢,百分一直是一的情况下啊,货一到锁了,然后可以执行业务逻辑了,那可以放弃重试了,来执行业务操作,最后释放锁。就可正常执行了呀。哎,所以呢,咱就可以使用set n指令来做到独占排他使用啊好这个位置呢,咱的指令啊。
06:04
来一个X就可以做到了。啊,从刚才的分析我们可以发现,但其实呢,所呀,我们从操作这个维度也可以去分析一下,咱应该有包含三个操作。那么第一个操作呢,咱就是加锁的操作了,那大可以使用SNX为加锁。那么然后第二个操作呢,我们就是解锁操作了啊,那我们代码执行完成之后,那方法执行完了要进行解锁。那么解锁咱可以使用DL指令,那么来解锁,把锁的给它释放掉。那么如果我获取锁失败了,还有其他请求获取锁失败了,才可以进行重试,那重试怎么重试呢?我们可以使用递归来重试。那么也可以使啥呢?使用死循环来去使用循环,那么来以公式啊都可以,那反复来执行SN。那么直到呢,反应值是一为止。
07:01
啊,或者我递归,我不停的递归来调用,调用自己的方法啊,直到霍金锁为止。那也是可以的。那到时候呢,我们这两种情况呀,咱都可以去演示一下啊。
我来说两句