00:00
如果我们的共享资源不是在MYSQ里面的,而在release里面的,那么在又该如何去保证线产权呢?好,那我们就以为例来去演示一下。那么首先呢,我可以连上我虚拟机里面的。那么通过red clean,那red安装,那咱这里呢,就不再介绍了。我是你们呢,都已经安装好了,那如果没有安装好,请参照上衣谷的相关视频。那我这里呢,来去设置一个库存,来一个stock是5000件库存。那每访问一次,那我就可以进行简易操作。那么知道减为零的时候,如果发送5000个请求应该减为零,那减为零的话呢,就说明已经现场安全了,那否则呢,就说明出现超卖现象了。好,那我们来去找到我们的代码,那我首先呢,也要能够连上我们的。那咱们要去找到的。
01:02
啊,这个依赖给它配置到我们的泡沫茶苗里面去。那就可以来一个depend啊RA,那我这里呢,使用的是data啊ready。啊,因为使用它呢,会更加方便一点。啊,然后呢,我们来找到咱们的配置文件,好在配置文件里面,我们来去配置red地址,来一个host。那我这里呢,是在虚拟机里面哈,所以呢,地址呢是幺七二点幺六点幺幺六点好100。那么还有呢是端口号,端口号呢,我就不配置了,因为我的默认端口号就是6379,那如果你不是6379,那你可以去配置一下。当然呢,还有很多其他配置,比如说呢,线程池的相关参数啊,最大线程数。还有这个空闲的线程数啊,等待时间这些东西。那我这里呢,就都不配置了啊,因为呢,我将来呢,更多的是横向比较在相同参数情况下,那不同方案之间的性能差异。
02:07
所以呢,咱这的话呢,就不配置也可以啊,我只能够,我只要能够连接上那就可以了。好,那我们啊,有了这个red之后呀,啊,有了这个依赖以及配置之后呢,那我们就可以去使用咱们的red。然后摊牌他。那么以及呢,咱的spring,那就可以使用这两个客户端。那么这两个客户端呢,其实啊,咱这个的话呢,使用哪个呢,使用这个spring这个啊,因为呢,它看起来呢会更加方便。啊,读起来也会更加方便一点。那么其实你只要引入的依赖,那么在我们的spring部的自动配置类里面。自动配置包里面,咱们那个自动配置呀,就可以生效了啊。那么只要对于我们的文不有一定基础的哈,那么咱们都知道文不有一个默认配置这样的一个包,在这包里面呢,给我们的很多技术都提供了一些默认配,其中就包含了那red的相关配置,在这个data目录下有一个red子目录。
03:16
那么在这个里面呢,它就有RA的自动配置类,那么这个自动配置类。上面它有一个conditional on class。只要我们引入release相关依赖,它就会有这样的一个release操作对象。那么这个类有了之后呀,我们就自动配置呢,也就可以生效了啊。那我们可以看一下,在这个里面,它给咱注入了通过it b啊这样的一个注解,那么注入了一个ready temp,那么还注入了一个string ready temperature,那他们俩有什么不一样呢?不一样的地方就是序列化气不一样。那么因为呢,咱的ready呀,它默认的序列化器使用的是什么呢?是JDK的序传器,那么可以看一下,它有一个默认的序列化器,使用的是JDK的序动器。
04:06
那么也就是说,如果我们使用ready探来去保存数据的话,来操作我们的ready的话,那么你写的数据呢,它都是二进制的。啊,完全没有什么可读性。所以呢,调试起来呢,就会比较麻烦。所以咱一般啊,你可以呢,使用这个东西呢,但是你必须得要去设置,去浏览器设置成string的。就字符串的,或者说呢,设成接性的旋转器。好,那我们这里的话呢,就有一个帮咱设置好的一个序列化器啊,序列化器设置好的啊,那么就是这个spring,就是red comp。那么在这个无参构造法里,我们知道在死spring里面,它默认使用是无参构造法给我们初始化的啊。在这个里面,它就会给我们去啊设置蓄炼化器啊,都是死真的那么蓄炼化器啊这个玩意儿。
05:02
那么都是真的,这也很方便的呀。那读起来呢,就会很直观啊,那么你放的什么样的数据,那你读取出来它就有什么数据。然后的可读性呢,非常高。啊,然后呢,在这个里面呢,你也可以看得懂。假如说你使用的是GDK的去拉机,在这里你也看不懂的哈。所以呢,我们这里呢,选择使用string ready ready temperature,当是ready temperatureet,那就来一个the ul where。所以我这个ready碳排它啊,它是一个string类型的啊。啊,经常有同学问我,老师,你使用的是ready,我也使用ready,怎么就不行呢?因为它的类型是什么类型的,也是这个类型。而我这里虽然是叫ready comp排的,但是我的类型呢是string ready comp的啊,所以呢,一定要看清楚了。好,那么然后呢,我们可以把咱这个减库存方法呀,再给它拷背一下,然后呢,放在我们这个上面去,那放进去之后呢,咱可以把这个方法呀,重新拧一下,再改成啥呢,改成四了啊。
06:09
改成四,那么然后呢,回到我们这个抵达方法里面去,那么咱们这个方法呢,就需要去完全的去改造一下了。那么基本过程还是三步,那么第一步呢,查询库存,第二步呢,判断库存是否充足,那么第三步我们来去扣减库存,那这三个基本步骤我们还是要有的。那咱把这三个步骤呢,保留下来。来看具体代码该怎么去写啊。首先查询库存,我们应该是类似,点red this temp,点上object in for value,点上get,我就可以查询四套的库存了。那么最终呢,能给你拿到这样的一个库存对象。啊,它是一个字符串类型的。那不管它是什么类型的,那我们得要去判断这个库存是否为空啊,来一个那么可以判断。
07:01
那在K呢,来一个嗯,Stock,如果你不等于。不等于,那那么并且stock改上LIS,然后呢是不等于零,那你认为呢,它不为空了。那不为空的情况下。啊,过于空的情况下,那我们呢,得要把这个字符串类型的库存。那么转换成in特型的库存,然后减减之后呢,给它保存进去,但也有同学说你搞那么麻烦干嘛,对吧,我们直接呢就这样就减库存normal么?来一个函呢,来一个点下底底可方法来就可以减库存了呀。那确实哈,RA里面是有decree这个方法的啊,它就可以呢,直接减库存,那你不用去转换这个地方。但是呢,哎,我们呢知道,但是呢,他故意这么去玩啊。哎,如果是用低减库存的话,那其实就没什么挑战性了啊。
08:03
好,那没有困难,我们得要去制造困难。好,那这里的话呢,咱们要转换一下啊。啊,来一个嗯啥呢,来一个转换嘛,对吧?啊这是。Int int点上的value intake点上value of,把stock类型的转换成int类型,那么这样的话呢,咱就可以拿到这个talk的这个数量了,咱可以来一看呢,来一个ST这样子。那我们来判断一下if。这应该是一个if ST,如果大于零,那我就可以进行减减之后呢,保存到数据库里面去,那就可以进行扣减库存了,把它呢,给它放到这个上面去啊。那我们呢,不打算使用啊,就是这个这个方法,那我们使用什么呢?还使用这个set方法。啊,把这个talk呢,给它放进去。
09:01
那么值。值是多少呢?我们可以呢,减减ST给它放到是这个位置,但咱们这个位置呢,必须得是死春类型的啊,因为我们使用的是死string的去化器,那么一切都是四五串。K是字符串,B是字符串。那在这里呢,就需要转换一下了,咱可以使用string,然后value of啊把它给放进去就转成字符串了。好,那我们这个代码呢,咱们就已经那么写好了哈,写好之后呢,我们打开浏览器,我们来去刷新一下。那么此时呢,已经刷新成功,说明代码呢,没有明面上的错误,那我们来看一下有没有扣减库存,我们来一个啊,Get指令,然后是stock。那我们可以看到啊,已经减了一件库存,那说明呢,确实好像没有什么问题,那呢,我们打开压力式的工具,我们在高并发情况下再去压测一下。
10:00
那咱重新把库存数量设置为,设置为5000这个数量。设置好之后呢,我们来去启动压力测试。好来看最终效果,那么性能呢,非常高啊,再飙升啊,那我们呢,可以再试一次对吧,比如说我在这个地方呢,再去设置一下,设置好之后呢,我再来去运行。啊,因为第一次运行啊,我们的系统呢,需要预热,所以体现不出它完整的性能啊,特别是在里面它性能呢本来就很高。好,我们现在呢,来去看一下咱们这个最终的库存值是多少呢?是3700多。那说明什么呢?说明并发出现了问题。出现了超卖现象。
我来说两句