库存超卖是如何产生的?
库存为1,但是第一个线程在库存-1的事务未提交的时候被第二个线程读到了,此时第二个线程会认为当前库存仍然是1,然后也会-1.相当于减掉了两次1,最后发生超卖。
解决方法:
首先在redis里面通过定时任务调度设置秒杀商品的库存,比如1001号商品的库存是10.
1.首先通过NGINX反向代理,实现网关
2.通过redis的lua脚本 decr 原子性的缩减库存
3.大于0的话就会生成一个订单号,将生成的订单号返回,通过订单号轮询获取订单状状态
4.生成订单号之后通过RocketMQ进行Qos限速,异步推送进行订单的创建和处理库存。