美文网首页
干货 | 电商项目扣减库存方案

干货 | 电商项目扣减库存方案

作者: 黑马程序员上海中心 | 来源:发表于2020-01-17 14:28 被阅读0次

大家是不是在面试过程中经常被问到,你电商项目扣减库存时,到底是下单减库存呢?还是付款减库存? 那今天给大家出几种解决方案,有不对的地方欢迎批评指正!!
一、扣减库存的三种方案
(1)下单减库存
  用户下单时减库存
  优点:实时减库存,避免付款时因库存不足减库存的问题
  缺点:恶意买家大量下单,将库存用完,但是不付款,真正想买的人买不到
(2)付款减库存
  下单页面显示最新的库存,下单时不会立即减库存,而是等到支付时才会减库存。
  优点:防止恶意买家大量下单用光库存,避免下单减库存的缺点
  缺点:下单页面显示的库存数可能不是最新的库存数,而库存数用完后,下单页面的库存数没有刷新,出现下单数超过库存数,若支付的订单数超过库存数,则会出现支付失败。
(3)预扣库存
  下单页面显示最新的库存,下单后保留这个库存一段时间(比如10分钟),超过保留时间后,库存释放。若保留时间过后再支付,如果没有库存,则支付失败。例如:要求30分钟内支付订单。
  优点:结合下单减库存的优点,实时减库存,且缓解恶意买家大量下单的问题,保留时间内未支付,则释放库存。
  缺点:保留时间内,恶意买家大量下单将库存用完。并发量很高的时候,依然会出现下单数超过库存数。
二、如何解决恶意买家下单的问题
这里的恶意买家指短时间内大量下单,将库存用完的买家。
(1)限制用户下单数量
  优点:限制恶意买家下单
  缺点:用户想要多买几件,被限制了,会降低销售量
(2)标识恶意买家
  优点:卖家设定一个备用库存,当支付时,库存已用完,扣减备用库存数,这就是常见的补货场景
  缺点:因高并发场景下,数据可能存在不一致性的问题
三、如何解决下单成功而支付失败(库存不足)的问题
(1)备用库存
  商品库存用完后,如果还有用户支付,直接扣减备用库存。
  优点:缓解部分用户支付失败的问题
  缺点:备用库存只能缓解问题,不能从根本上解决问题。另外备用库存针对普通商品可以,针对特殊商品这种库存少的,备用库存量也不会很大,还是会出现大量用户下单成功却因库存不足而支付失败的问题。
四、如何解决高并发下库存超卖的场景
库存超卖最简单的解释就是多成交了订单而发不了货。
场景:
用户A和B成功下单,在支付时扣减库存,当前库存数为10。因A和B查询库存时,都还有库存数,所以A和B都可以付款。
A和B同时支付,A和B支付完成后,可以看做两个请求回调后台系统扣减库存,有两个线程处理请求,两个线程查询出来的库存数 inventory=10,
然后A线程更新最终库存数 lastInventory=inventory - 1 = 9,
B线程更新库存数 lastInventory=inventory - 1 = 9。
而实际最终的库存应是8才对,这样就出现库存超卖的情况,而发不出货。
那如何解决库存超卖的情况呢?
1.SQL语句更新库存时,如果扣减库存后,库存数为负数,直接抛异常,利用事务的原子性进行自动回滚。
2.利用SQL语句更新库存,防止库存为负数

  1.     UPDATE [库存表] SET 库存数 - 1 WHERE 库存数 - 1 > 0
    
  2.     如果影响条数大于1,则表示扣减库存成功,否则订单失败,并退款。
    

五、秒杀场景下如何扣减库存
(1)下单减库存
因秒杀场景下,大部分用户都是想直接购买商品的,可以直接用下单减库存。
大量用户和恶意用户都是同时进行的,区别是正常用户会直接购买商品,恶意用户虽然在竞争抢购的名额,但是获取到的资格和普通用户一样,所以下单减库存在秒杀场景下,恶意用户下单并不能造成之前说的缺点。
而且下单直接扣减库存,这个方案更简单,在第一步就扣减库存了。
(2)将库存放到redis缓存中
  查询缓存要比查询数据库快,所以将库存数放在缓存中,直接在缓存中扣减库存。然后在通过MQ异步完成数据库处理。
(3)使用量自增方式
可以先增加已使用量,然后与设定的库存进行比较,如果超出,则将使用量减回去。
项目中用到了很多机制,但是没有总结出来,学习架构需要不断地总结。

[2020IT学习线路图+线上公开课免费资源请+xuejie077)
推荐阅读:

2019年黑马新版C/C++学习路线图(内含大纲+视频+工具+书籍+面试)

2018年新版Java学习路线图(内含大纲+视频+工具+书籍+面试)

2018年最新Python学习路线图(内含大纲+视频+工具)

2018版Go语言+区块链学习路线图(含大纲+视频+工具+资料)

2018新版前端与移动开发学习路线图(视频+工具+书籍+资源)

相关文章

  • 干货 | 电商项目扣减库存方案

    大家是不是在面试过程中经常被问到,你电商项目扣减库存时,到底是下单减库存呢?还是付款减库存? 那今天给大家出几种解...

  • 分布式事务

    使用场景 例如: 电商下单 订单生成+扣减库存订单生成属于订单系统,扣减库存属于库存系统 db本地事务如何保证的?...

  • 基于redis实现的扣减库存

    在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。 解决方案 使用m...

  • 电商-库存管理

    对于库存管理来说,最重要的是库存的分配与扣减逻辑。 (1)电商库存体系分为三层:销售层、调度层、仓库层。 (2)库...

  • 为什么使⽤mq?具体的使⽤场景是什么?

    mq的作⽤很简单,削峰填⾕。以电商交易下单的场景来说,正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣...

  • 商城系统库存问题分析

    电商的库存设计,是后台的重点,也是难点,关乎商品是否存在超卖。商品的库存增加方式倒不难,直接在后台添加即可,而扣减...

  • 电商产品库存扣减逻辑

    解读库存扣减逻辑: 1.库存主要分 总库存 冻结库存 可用库存 2.库存在提交订单的时候增加冻结库存并扣减可用库存...

  • 电商架构实践-库存一致性实现方案

    前言 最近在梳理后端业务场景时,发现商品库存扣减逻辑的实现存在一定的风险。所以,针对目前库存扣减实现方案做一些分析...

  • 电商技术 -- 库存设计指北

    前言 最近在解决一套老电商系统的库存"超卖"问题。一直以为超卖问题,最难解决的是库存扣减,实则不然,我们的系统在解...

  • 库存扣减

    此篇文章来自于京东大神开涛的微信公众号中的内容,感谢开涛大神,慢慢的干活,地址如下: https://mp.wei...

网友评论

      本文标题:干货 | 电商项目扣减库存方案

      本文链接:https://www.haomeiwen.com/subject/hmbczctx.html