当前位置:网站首页>扣减库存方案
扣减库存方案
2022-08-01 20:32:00 【lht94】
扣减库存方案设计
扣减库存步骤
查询库存
判断是否超出库存
开始扣减
遇到的问题
超卖现象
用户 A 和 B 成功下单,在支付时扣减库存,当前库存数为 10。因 A 和 B 查询库存时,都还有库存数,所以 A 和 B 都可以付款。

然后 A 线程更新最终库存数 lastInventory = inventory - 1 = 9,
B 线程更新库存数 lastInventory = inventory - 1 = 9。
而实际最终的库存应是 8 才对,这样就出现库存超卖的情况,而发不出货。
恶意买家下单
恶意买家指短时间内大量下单,将库存用完的买家。如果扣减库存后,用户不下单,占用库存名额,但是也要避免某些用户真实需要大量订单。
解决方案
解决超卖现象
利用SQL语句更新库存,防止库存为负数
UPDATE [库存表] SET 库存数 - 1 WHERE 库存数 - 1 > 0
update的锁可以参考:mysql update锁分析 这篇文章了解一下。
分布式锁
分布式锁,根据商品编号加锁,去扣减库存。
预设库存到redis
秒杀场景提前将库存预设到redis,然后通过redis去扣减,但是要确保原子性(利用lua脚本实现);
采用下单减库存
优点:实时减库存,避免付款时因库存不足减库存的问题
缺点:下单扣减库存是会造成恶意买家购买不付款占用库存的问题存在;
预减库存
优点:结合下单减库存的优点,实时减库存,且缓解恶意买家大量下单的问题,保留时间内未支付,则释放库存。
缺点:保留时间内,恶意买家大量下单将库存用完。并发量很高的时候,依然会出现下单数超过库存数。
付款扣减库存
优点:防止恶意买家大量下单用光库存,避免下单减库存的缺点
缺点:下单页面显示的库存数可能不是最新的库存数,而库存数用完后,下单页面的库存数没有刷新,出现下单数超过库存数,若支付的订单数超过库存数,则会出现支付失败。
秒杀扣减并定时人工释放库存
目前直播带货已经非常的火爆了,很多主播上单都是秒清库存的状态,但是也有很多人在直播间只下单不付款,以抖音为例,经常会看到主播让大家抓紧付款,否则就要释放了,由此可见抖音电商使用的就是预减库存,人工可以释放库存的方式。
方案的思路就是:
先下单 扣减库存 如果没有付款,指定时间后自动释放库存 如果是秒杀商品,库存被恶意占用,商家可以人工去通知大家,并手动释放没付款的那些库存给没有抢到的人去抢购 如果有人恶意占大量库存,也可以设置一个限购数量
结论
各种方案都可以,但是超卖问题必须解决,后续可以根据场景,比如是秒杀,还是直播间,活着普通的购物方式,选择合适的方案。
参考文档: 《扣减库存方案》《浅析扣减库存的方案设计》
边栏推荐
- 通配符 SSL/TLS 证书
- 【个人作品】记之-串口日志记录工具
- 【多任务优化】DWA、DTP、Gradnorm(CVPR 2019、ECCV 2018、 ICML 2018)
- 给定中序遍历和另外一种遍历方法确定一棵二叉树
- [Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear
- Interview assault 70: what is the glue bag and a bag?How to solve?
- 第55章 业务逻辑之订单、支付实体定义
- 【多任务学习】Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts KDD18
- 【Untitled】
- 任务调度线程池-应用定时任务
猜你喜欢
随机推荐
Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
58: Chapter 5: Develop admin management services: 11: Develop [admin face login, interface]; (not measured) (using Ali AI face recognition) (demonstrated, using RestTemplate to implement interface cal
Hangao data import
[Multi-task model] Progressive Layered Extraction: A Novel Multi-Task Learning Model for Personalized (RecSys'20)
nacos installation and configuration
【七夕特别篇】七夕已至,让爱闪耀
面试突击70:什么是粘包和半包?怎么解决?
智能硬件开发怎么做?机智云全套自助式开发工具助力高效开发
数字孪生北京故宫,元宇宙推进旅游业进程
【kali-信息收集】(1.6)服务的指纹识别:Nmap、Amap
不同的操作加不同的锁详解
【无标题】
【无标题】
【luogu P1912】诗人小G(二分栈)(决策单调性优化DP)
用户身份标识与账号体系实践
SIPp installation and use
外骨骼机器人(七):标准步态数据库
Goroutine Leaks - The Forgotten Sender
【Dart】dart之mixin探究
useful website