我是靠谱客的博主 背后诺言,最近开发中收集的这篇文章主要介绍库存出库防止超卖,基于redis解决方案(未完),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.构建超卖场景。

mysql + springboot +mybatis

1.1创建库存表

字段

id ,商品名,库存量。

1.2 springboot创建减库存接口

 1.2.1接口的实现逻辑,先查询数量,大于本次出库量则扣减

// 最简单那的扣减库存 存在并发问题 超卖问题
    @PostMapping("/deCreateProduct")
    public void deCreateProduct( @RequestBody Product  product) {
        productService.deCreateProduct(product);
    }

    1.2.2  jmter测试 1000用户数并发执行。

1.2.3 测试前 阿莫西林3000 ,预期值执行完2000

 1.2.4实际执行后结果 只扣减了32个。

 1.2.5结果分析

        方法代码逻辑

                1.查询数量,

                2.判断大小

                3.计算扣减

                4.修改数据

          并发场景下,出现在计算扣减上,

                例如

                        A查询时3000

                                计算完 3000-1

                                然后修改2999

                        B也查询出3000

                                计算完 3000-1

                                然后修改2999

        出现了复写,导致数据不正确

 1.2.5解决方案

      解决方式基于mysql的乐观锁 在更新的时候,使用(CAS+版本号更新)+重试条件(重试次数或者重试时间限制)乐观锁的方式更新库存。

select amout ,id , version ------ 

update xx set amout  where id== and version =#{version}

     解决方式基于mysql的行锁机制 

 update product
        set amout = amout- #{amout}
        where id = #{id}
          and amout >= #{amout}

                缺点 数据库的压力太大(基于行锁适合,并发量小的情况)

       

1.3 jmter 测试

        Apache JMeter - Download Apache JMeter 下载地址。

       Jmeter教程(一) - 入门_淡淡的说非的博客-CSDN博客_jmeter 使用教程。

1.3项目集成redis

1.31

最后

以上就是背后诺言为你收集整理的库存出库防止超卖,基于redis解决方案(未完)的全部内容,希望文章能够帮你解决库存出库防止超卖,基于redis解决方案(未完)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部