对库存模块从业务架构角度进行说明。
功能模块划分
- 下单的库存预占
- 出库的库存真实扣减
- 库存的回滚(取消订单(来自商家,用户))
- 库存的调整(订单调整,商家的调整)
- 是否可买(限时销售,定时销售)
其他业务
- 销量排名
- 库存预警
涉及库存场景
1.用户正常流程
用户下单-商家分拣-(快递员取件)-物流运输-快递员投递
2.用户购买商品缺货情况一
用户下单-商家缺货-用户协商-调整缺货商品-商家分拣-(快递员取件)-物流运输-快递员投递
3.用户取消订单
用户下单-用户取消
4.风控
用户下单-风控根据规则设置为异常单-订单锁定-订单取消或者订单继续生产
5.商家维护可售库存量,即时或者定时生效
库存计算公式
可用库存=现货库存-预占库存-锁定库存
问题
1.如果安全的扣减库存?
update… set x_stock=x_stock-buy_num where id = … and x_stock>=buy_num
2.秒杀情况?限流,排队
缓存放个库存计数器,超过的请求直接返回
请求排队
3.秒杀同一个用户不能抢购一个商品2次?
缓存记录用户和抢购商品关系,记录是否抢购过,如果抢购过就返回(记录存在时间为活动时间)