电商产品中,下单减库存与付款减库存的优缺点?

没有哪种好,最关键是看自己的业务适合哪种
1、下单减库存。生成一个订单,库存减1 。但其实用户并没有完成付款,没有走完订单流程
这种情况,用户量大的时候,会出现恶意下单情况,即只下单,不付款。因此很多电商平台都会设置一个订单保留时间,超过时间,订单失效,库存返还
这种情况还会有一种,库存不多的时候(比如促销),实际意义上是有库存。但是因为一小部分人的订单没有完成,因此其他用户会看到已售罄的情况,会在某个时间点阻止其他用户购买。淘宝这点做得蛮好的,当有其他用户未付款时,淘宝会提示“其他用户正在付款中”

2、付款减库存。一个订单付完款后才减去相应的库存
这种处理方式基本能避免掉1内的所有问题,但也会诞生新的问题。即“超卖”,用户拍下时有货,付款后没货,这种体验会很差。
具体实践时使用哪种方式,就看具体情况了。
有人评价:一般第一种。第二种遇到热卖商品时,会形成大量超卖订单。

3、订单系统:先减库存还是先下订单
答案是先下单再减库存
以 MySQL 作为 DB 为例,下订单就是 insert,在使用索引的情况下,insert 插入是行级锁,支持每秒 4W 的并发。减库存就是 update 操作,命中索引时也是行级锁,但是这是个独占锁,所有的操作都要等待前一个释放锁后才能继续 update。

问题就在这里,根据 MySQL 两段锁协议,我们应该把热点操作放到离 commit 近的位置,这样可以减少行级锁的持有时间!自然处理效率就更好一些。

事务begin —> insert —> 其他操作 —> update —> 事务commit

你可能感兴趣的:(电商产品中,下单减库存与付款减库存的优缺点?)