秒杀三个基本过程:生成订单、减扣库存、用户支付
1、下单减库存
先创建订单,然后扣除库存,等待用户支付。
这种解决方案,可以保证订单不会超卖,因为创建订单之后就会减库存,这是一个原子操作。
但是会产生一些问题:
1)在极限并发情况下,任何一个内存操作的细节都至关影响性能,尤其像创建订单这种逻辑,一般都需要存储到磁盘数据库的,对数据库的压力是可想而知的;
2)如果用户存在恶意下单的情况,只下单不支付这样库存就会变少,会出现“少卖”,虽然服务端可以限制 IP 和用户的购买订单数量,这也不算是一个好方法。
2 支付减库存
用户支付了订单再减库存,感觉不会少卖。但是极限并发情况下,用户可能会创建很多订单。
当库存减为零的时候很多用户发现抢到的订单支付不了了,这也就是所谓的“超卖”。也不能避免并发操作数据库磁盘 IO。
3 预扣库存
上面两种方案得出结论:只要创建订