下单减库存
用户提交订单之后,库存减1,意味着生成订单并不代表用户已经付款了,如果用户不想要了,就可以选择不支付,那么就会出现恶意下单的情况,但是却占用了1个库存。在做活动的时候就可能出现其他用户看到的是没有货了,可是库存其实是有的,因为有用户没有支付,所以这些都是下单减库存的一些弊端。
优点
实时减库存,避免付款时因库存不足减库存的问题。
缺点
恶意买家大量下单,将库存用完,但是不付款,真正想买的人买不到。
解决方案
对订单做超时处理,当订单超过时间,订单就自动失效了,库存就会返还加1。
付款减库存
付款减库存就没有了下单减库存的烦恼,但是付款减库存也有一个问题,就是付款后没货了,下订单的时候,库存还充足,可别人手快,早一步完成了支付,就导致手慢的用户买不到了。
如果再并发的情况下呢?如果碰巧两个人的手速一致,都完成支付了,又会怎样?
优点
防止恶意买家大量下单用光库存,避免下单减库存的缺点
缺点
下单页面显示的库存数可能不是最新的库存数,而库存数用完后,下单页面的库存数没有刷新,出现下单数超过库存数,若支付的订单数超过库存数,则会出现支付失败或超卖的问题。
因第三方支付返回结果存在时差,同一时间多个用户同时付款成功,会导致下单数目超过库存。
解决方案
目前没想好,有想法的小伙伴留言告知。
总结
不管是下单减库存还是付款减库存,还是要结合具体的业务场景来定,下单减库存,在技术上能够处理的并发量是要大于付款减库存的的设计。
如何解决恶意买家下单的问题
恶意买家指短时间内大量下单,将库存用完的买家。
1.限制用户下单数量
优点:限制恶意买家下单
缺点:用户想要多买几件,被限制了,会降低销售量
2.标识恶意买家
优点:卖家设定一个备用库存,当支付时,库存已用完,扣减备用库存数,这就是常见的补货场景
缺点:因高并发场景下,数据可能存在不一致性的问题
如何解决下单成功而支付失败(库存不足)的问题
备用库存
商品库存用完后,如果还有用户支付,直接扣减备用库存。
优点:缓解部分用户支付失败的问题
缺点:备用库存只能缓解问题,不能从根本上解决问题。