秒杀扣除库存方案

减库存有哪几种方式

  • 下单 当买家下单后,在商品的总库存中减去买家购买数量。下单减库存是最简单的减库存方式,也是控制最精确的一种,下单时直接通过数据库的事务机制控制商品库存,这样一定不会出现超卖的情况。但是你要知道,有些人下完单可能并不会付款。
  • 付款减库存 即买家下单后,并不立即减库存,而是等到有用户付款后才真正减库存,否则库存一直保留给其他买家。但因为付款时才减库存,如果并发比较高,有可能出现买家下单后付不了款的情况,因为可能商品已经被其他人买走了。
  • 预扣库存 这种方式相对复杂一些,买家下单后,库存为其保留一定的时间(如 10 分钟),超过这个时间,库存将会自动释放,释放后其他买家就可以继续购买。在买家付款前,系统会校验该订单的库存是否还有保留:如果没有保留,则再次尝试预扣;如果库存不足(也就是预扣失败)则不允许继续付款;如果预扣成功,则完成付款并实际地减去库存。

以上减库存的几种方式存在的问题

  • 由于购物过程中存在两步或者多步的操作,因此在不同的操作步骤中减库存,就会存在一些可能被恶意买家利用的漏洞,例如发生恶意下单的情况。
假如我们采用“下单减库存”的方式,即用户下单后就减去库存,正常情况下,买家下单后付款
的概率会很高,所以不会有太大问题。但是有一种场景例外,就是当卖家参加某个活动时,此
时活动的有效时间是商品的黄金售卖时间,如果有竞争对手通过恶意下单的方式将该卖家的商
品全部下单,让这款商品的库存减为零,那么这款商品就不能正常售卖了。要知道,这些恶意
下单的人是不会真正付款的,这正是“下单减库存”方式的不足之处。
  • 付款减库存
既然“下单减库存”可能导致恶意下单,从而影响卖家的商品销售,那么有没有办法解决呢?
你可能会想,采用“付款减库存”的方式是不是就可以了?的确可以。但是,“付款减库存”又
会导致另外一个问题:库存超卖。
  • 既然“下单减库存”和“付款减库存”都有缺点,我们能否把两者相结合,将两次操作进行前后关联起来,下单时先预扣,在规定时间内不付款再释放库存,即采用“预扣库存”这种方式呢?
这种方案确实可以在一定程度上缓解上面的问题。但是否就彻底解决了呢?其实没有!针对恶
意下单这种情况,虽然把有效的付款时间设置为 10 分钟,但是恶意买家完全可以在 10 分钟
后再次下单,或者采用一次下单很多件的方式把库存减完。针对这种情况,解决办法还是要结
合安全和反作弊的措施来制止。

如何解决下单库存问题

给经常下单不付款的买家进行识别打标(可以在被打标的买家下单时不减库存)、给某些类目
设置最大购买件数(例如,参加活动的商品一人最多只能买 3 件),以及对重复下单不付款的
操作进行次数限制等。
posted @ 2020-01-25 16:24  DiligentCoder  阅读(1816)  评论(0编辑  收藏  举报