关于电商库存扣减的解决方案

 

目录

下单锁定库存    

付款减库存

采用虚拟库存和实际库存,redis+mysql(推荐)

为什么要预扣?

怎么检测库存不一致?


电商中很常见的就是库存扣减的问题了,那么究竟有哪些解决方案以及各自的优缺点呢?一共总结有几种方式

下单锁定库存    

   优点:可以解决库存减扣问题,不会出现超卖的问题

    缺点:体验差,如果只下单未付款,库存被锁定,让有意愿购买的用户无从下单,对销售业务有很大影响;

付款减库存

优点:防止恶意买家大量下单用光库存,避免下单减库存的缺点

缺点:付款时需要再主动调用一下扣库存的操作

下单页面显示的库存数可能不是最新的库存数,而是比实际库存要多,而库存数用完后,下单页面的库存数没有刷新,出现下单数超过库存数;若支付的订单数超过库存数,则会出现支付失败。或者是超卖的现象

采用虚拟库存和实际库存,redis+mysql(推荐)

使用虚拟销售库存和实际库存不仅可以对在途库存、预定货进行销售增加销量而且还可以保证仓库商品库存进行有效管理。

A、未付款订单给予20-40钟付款等待时间,未付款自动释放虚拟销售库存,尽量减少库存占用,避免影响销售。

B、 下单扣减虚拟销售库存,同时营销人员和产品部可以根据商品到货情况和生产情况进行提前增加虚拟销售库存,可以提前实现销售。

C、 商品按实际出库进行扫码出库进行扣减,从而保证业务数据和仓库运营数据能够有效同步管理,库存准确性,及时管理库存;

优点:扣redis库存=锁定库存,但是不影响mysql实际库存,运营可以看到实际库存进行管理

缺点:需要有一个库存不一样的同步

为防止恶意消耗库存,可针对userid下单未付款的情况进行限量

为什么要预扣?

如果直接扣除mysql库存,不好管理,不知道实际还剩多少库存,而预扣可以先扣redis,成功则扣mysql,不成功则还库存,所以mysql只有真正卖出去才扣库存,保证了数据的准确性

如果redis>mysql,可以下单,但是不能出库,后续要退款,这种情况很少

如果redis<mysql,不能下单,但是实际有库存,影响销售业绩。可以设置库存同步时间点,在redis库存<mysql的时候进行同步

保证最终库存不会有问题

怎么检测库存不一致?

如果不一致,可以在redis库存为0的时候检测是否需要同步,注意没有还库存的要过滤出去,可以根据商品查询未付款的订单数,还库存数=数据库库存 - 下单未付款数

如果极端情况在还库存的时候发生 下单未付款的订单付款了怎么办?没有关系,因为数据库库存和下单未付款数同步-1

参考:https://my.oschina.net/xiaominmin/blog/3060358

猜你喜欢

转载自blog.csdn.net/Goligory/article/details/104935782