温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
前面呢,我们借用递归啊来去实现了我们的分布热素,那么递归调用,那么其实呢不太好。因为呢,DV调用可能会引发占内存溢出。因为呢,可能经过了很多次的鼎力调用之后呢,依然有火机所失败了。那么最终就有可能会导致占内存溢出。那怎么避免这种情况呢?我们就可以把重市这一块改成循环,那就获取啊改成循环,那么怎么循环呢?哎,咱就可以给他使用while循环,那么来去重试,那么然后呢,把这行代码给它放到。我们的while循环里面去,如果你获取锁失败了,那就一直呢,反复的去尝试获取锁就可以了啊,改成V把它给放进去。然后呢,咱把这个呢,加一个大括号啊,咱们这一块呢,可以给它去掉了,就不需要这个if了,什么I还有这个画符号都不需要了,我可以把这个东西呢,给它移到咱们的while循环里面去了。
01:08
那么移好之后呀,这个DV调用不需要了啊,给它删掉,然后呢,格式化一下,那就改造好了。我们来看这行代码,这几行代码哈。那么首先呢,我们会通过SX来去获取数。如果霍许锁成功了,那就可以直接执行到下面去了,退出循环了呀,执行锁霍许锁成功了,那它反应就是处加一个非呢,就是false,那false情况下就不符合我们的循环条件了,那开始执行下面的业务操作,执行完了就释放锁。好,那么如果它霍金锁失败了,每次霍金锁都都失败了,那它就会返回呢,返回false,那么加一个非呢,就就是true。啊,灰色失败的情况下,那这个整个表达式呢,是一个处。然后呢开始睡眠,睡50毫秒之后呢,进入下一次循环,然后于是呢又再获取一次锁。
02:05
那么直到获取锁成功。然后呢,返回值,整个表达式的返回值是false,然后退出循环。开始执行业务操作。那么执行完了来解锁就可以了。好自然使用循环呢,也改造了。那么改造好之后呢,我们只要去重新启动我们的两个服务,那重新启动我们的服务二,然后再来重新启动我们的服务一。启动了之后呢,我们在浏览器中去刷新一下,试试来刷新。哎,发音成功。刷新成功,那么说明咱代码呢,基本上没啥问题啊,我们可以多刷新几次,应该都没啥问题。那没有问题的情况下,咱可以找到压力测试工具可以压一下了,但压之前呢,咱首先要把库存数量改成5000。那么找到压力测试工具,把这个东西呢,给它清空,好,我们来去运行一下。
03:00
那么此时它的并发量呢,吞吐量啊啊,应该是600左右。啊,性能呢,还是可以接受的啊。那么五五千的请求全部都已经执行成功了,失败率呢,是0%。那么然后呢,我们来看一下最终库存数量是多少,也已经减为零了。
我来说两句