00:00
Release的超卖现象明显,解决起来呢就会比较麻烦了,那我们来去分析一下咱该如何解决ist的超卖现象。那么首先呢,咱能够想到的吧,就这么几种方案。第一种解决方案,我们可以使用GVM本地锁机制,那么使用这种机制呢,玩法跟之前差不多,我们在方法开始的时候来去获取锁,那方法执行完成之前呢,我们要去释放锁。那么并且呢,你必须得要保证你的你的服务是单机部署,并且是单立模式的情况下,我们才能使用这种方式。那么这种方式呢,我们就不打算演示了,因为玩法呢都一样嘛,那你们可以自行去玩一下。那么然后第二种方式,我们可以使用RA提供的他的乐观所机制来解决。那呢,给我们提供了一套指令,通过这套指令我们就可以完成乐观所一种玩法了,一个是watch,还有呢是Mo,可以开启事物。
01:05
以及呢,Z啊这样的一个玩意儿,那么这一套指令呢,就可以去完成他的乐观死的玩法了。那玩钱呢,还是有点麻烦的。而且呢,可靠性也会比较差一点。好,那么第三种方案呢,我们也可以使用,可以使用分布式所啊,分布式所机制。那我们呢,来看第二种玩法,针对第二种玩法的这三个指令,那么很多同学呢,可能都感觉很陌生,那么即使之前学过这三个指令,但是由于呢,后续啊很少接触啊,所以呢啊也可能忘记了。那没有关系,我们再去写代码之前,咱可以呢,先回顾一下这三个指令,那么打开客户端,在这客户端里面,我们可以先去来一个watch,先去监听一个K的值。那么这三个指令啊,咱通常呢,在一起去使用它。
02:02
那么通过word可以监听一个或者多个K的值,那比如说我可以监听套库存的值,那么一旦监它值之后呀,那它值呢,就不能发生变化了。如果发生变化的话,那后续事物呢,就会取消。那只有没有变化的情况下,后续事故呢才能正常运行。那么此时我的top的值是3704。那如果没有其他人在这个过程中,在后续业务逻逻辑过程中,没有其他人来去更新这个值,可以改这个值,那我就可以正常的去完成我的。业务了,完成我的事务了。如果有其他人改变了,那我们的事物呢,会被取消掉啊。好,我们可以看一下,比如说我家里呢,有一写库存了,查到库存是3704,我判断呢,肯定大于零的,于是呢,我要开启事物,开始去写库存了啊,来一个母体啊开启事物,然后来写库存。
03:02
那么在写库文之前,可能有其他人呢,先一步写了哈,先一步去写了,比如说我再打开一个red客户端,那个red杠杠啊,来一个set talk,比如我设置为呃,3000了。那你不是3704吗?但另外一个客户端呢,直接把库存改为3000了,那是不是还能说明套的值呢,已经发生变化了。那么一旦发生变化好来看啊,我这边呢也来去我不知道啊,啊这个一这个客户端它不知道有其他人改变后的值了啊。他差价呢,还认为啥呢,还认为库存是3704呢。于是呢,他开始去设置的值是3703减一件嘛。3703,那么我已执行,哎,此时呢,当然他没有执行哈。它不是执行,它是入对了,哎,事物呢,它可以执行一系列的指令。
04:00
那么这一系列的指令啊,他不会立马执行。在什么时候才会执行呢?在执行啊的时候啊才会执行。啊,那么大家可以呢,来一个az克啊,这领位这样一个玩意儿,那我一飞车。啊,怎么样。NRL说完了,说明执行失败了。哎,那么这个地方输出的是谁呢?是我们这个里面的一系列指令,当然我这里只有一个指令啊。这个指印的。答应结果。那这个中间指所有指令打印结果,如果你只有一个指令,它得只有一个结果哈。啊N啊是空的。好,那么如果哎,那么咱此时这个死套值多少呢?来个get,它会先去看一下啊,它它值多少是跟我这个值三七零三一样呢,还是跟三千一样呢。还是3000的好,来看一下回回车,你发现是3000。
05:02
由于呢,我们这个地方它是先执行的,而事物里面这个是后执行的。哎,那么如果没有事物的情况下,它应该是3703,没有这个监听和事的情况下,应该是3703,但由于呢有监听和事务。那么咱这个指令呢,压根就没有执行,就取消执行了。好,那我们可以再来去试一下,比如说呢,我再来去来一个watch,那么stock a鉴定的值,那么查询stock的库存,我发现的是3000件库存,那符合我们的要求,于是我们开始来一个multi。我要去写库存了,来一个stock,那我减一件呀,我在两三千的基础上减一件,应该是2999。那么我其他客户端呢。其他客户端或者其他请求,而并没有操作这个库存。那么咱这个值呢,也就是说我们的后的值没有发生变化,那没有发生变化的情况下,我执行这个的时候,那它就可以执行成功,你看这呢,返回的是一个OK。
06:11
啊,由于呢,我这只有一个指令,所以这个呢只有一个反应值啊,如果你有多个指令的话,它会有个一,然后呢,OK,二怎么怎么样,三怎么怎么样,就分别对应咱的Mo体和中间的这些指定的反问结果题哈。好,那么我们此时呢,就算执行成功了。那我们的库存是多少件呢?还剩2999件。那么咱就演示出来了啊。如果没有其他事物干扰,那么他就可以执行成功,否则呢,就执行失败。那么执行失败的情况下,那在代码里面就可以进行重试。刚才呢,我们简单的演示了一下这三个指令,那这三个指令呢,具体作用呢,咱可以再去解释一下啊,那么首先watch我们可以发现它可以监控一个K的值,它可以呢,监控一个或者多个K的值。
07:11
那么,如果在事物执行之前。执行之前,那么事物执行谁来执行呢?是exactly执行的啊,是我们有一个啊个Z这个指令执行之前。如果这个K的值或者是多了,K的值发生变化了。这之前,如果K的值,K的值发生变化,那么则取消事物执行。那么否则呢,我们的事物才会执行啊。好,这是watch这个指令。那么然后还有moty这个指令,那Mo这个指令啊,它可以开启一个事物啊,那比较简单开启事物,那比如说呢,我可可能有一系列的指令。
08:06
那为了保证这一系列指令啊啊一起执行,咱可以使用Mo的那个玩意。好,那么还有呢是it,那么it呢可以去执行事务啊,执行事务这三个指令呢,我们一起使用,那就可以做到red的乐观手算法了。那么咱接下来呢,来看代码中该如何去使用这三个指令。
我来说两句