当前位置:网站首页>扣减库存方案
扣减库存方案
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脚本实现);
采用下单减库存
优点:实时减库存,避免付款时因库存不足减库存的问题
缺点:下单扣减库存是会造成恶意买家购买不付款占用库存的问题存在;
预减库存
优点:结合下单减库存的优点,实时减库存,且缓解恶意买家大量下单的问题,保留时间内未支付,则释放库存。
缺点:保留时间内,恶意买家大量下单将库存用完。并发量很高的时候,依然会出现下单数超过库存数。
付款扣减库存
优点:防止恶意买家大量下单用光库存,避免下单减库存的缺点
缺点:下单页面显示的库存数可能不是最新的库存数,而库存数用完后,下单页面的库存数没有刷新,出现下单数超过库存数,若支付的订单数超过库存数,则会出现支付失败。
秒杀扣减并定时人工释放库存
目前直播带货已经非常的火爆了,很多主播上单都是秒清库存的状态,但是也有很多人在直播间只下单不付款,以抖音为例,经常会看到主播让大家抓紧付款,否则就要释放了,由此可见抖音电商使用的就是预减库存,人工可以释放库存的方式。
方案的思路就是:
先下单 扣减库存 如果没有付款,指定时间后自动释放库存 如果是秒杀商品,库存被恶意占用,商家可以人工去通知大家,并手动释放没付款的那些库存给没有抢到的人去抢购 如果有人恶意占大量库存,也可以设置一个限购数量
结论
各种方案都可以,但是超卖问题必须解决,后续可以根据场景,比如是秒杀,还是直播间,活着普通的购物方式,选择合适的方案。
参考文档: 《扣减库存方案》《浅析扣减库存的方案设计》
边栏推荐
- Compose实战-实现一个带下拉加载更多功能的LazyColumn
- 卷积神经网络(CNN)mnist数字识别-Tensorflow
- 【Dart】dart之mixin探究
- SIPp 安装及使用
- 小数据如何学习?吉大最新《小数据学习》综述,26页pdf涵盖269页文献阐述小数据学习理论、方法与应用
- Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
- 微信小程序云开发|个人博客小程序
- 根据Uniprot ID/PDB ID批处理获取蛋白质.pdb文件
- Debug一个ECC的ODP数据源
- 】 【 nn. The Parameter () to generate and why do you want to initialize
猜你喜欢
【kali-信息收集】(1.4)识别活跃的主机/查看打开的端口:Nmap(网络映射器工具)
面试突击70:什么是粘包和半包?怎么解决?
KDD2022 | 自监督超图Transformer推荐系统
【Untitled】
To promote energy conservation institute 】 【 the opinions of the agricultural water price reform
实用新型专利和发明专利的区别?秒懂!
The graphic details Eureka's caching mechanism/level 3 cache
Debug一个ECC的ODP数据源
用户身份标识与账号体系实践
我的驾照考试笔记(2)
随机推荐
Custom command to get focus
【Untitled】
第59章 ApplicationPart内置依赖注入中间件
deploy zabbix
乐观锁批量跟新 纯SQL
用户体验好的Button,在手机上不应该有Hover态
【无标题】
myid file is missing
第60章 ApplicationPart自动集成整体性和独立性插件项
Use WeChat official account to send information to designated WeChat users
30-day question brushing plan (5)
基于FPGA的任意字节数(单字节、多字节)的串口(UART)发送(含源码工程)
不同的操作加不同的锁详解
第55章 业务逻辑之订单、支付实体定义
XSS range intermediate bypass
我的驾照考试笔记(1)
因斯布鲁克大学团队量子计算硬件突破了二进制
【社媒营销】如何知道自己的WhatsApp是否被屏蔽了?
Addition, Subtraction, Multiplication of Large Integers, Multiplication and Division of Large Integers and Ordinary Integers
【nn.Parameter()】生成和为什么要初始化