当前位置:网站首页>扣减库存方案
扣减库存方案
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 > 0update的锁可以参考:mysql update锁分析 这篇文章了解一下。
分布式锁
分布式锁,根据商品编号加锁,去扣减库存。
预设库存到redis
秒杀场景提前将库存预设到redis,然后通过redis去扣减,但是要确保原子性(利用lua脚本实现);
采用下单减库存
优点:实时减库存,避免付款时因库存不足减库存的问题
缺点:下单扣减库存是会造成恶意买家购买不付款占用库存的问题存在;
预减库存
优点:结合下单减库存的优点,实时减库存,且缓解恶意买家大量下单的问题,保留时间内未支付,则释放库存。
缺点:保留时间内,恶意买家大量下单将库存用完。并发量很高的时候,依然会出现下单数超过库存数。
付款扣减库存
优点:防止恶意买家大量下单用光库存,避免下单减库存的缺点
缺点:下单页面显示的库存数可能不是最新的库存数,而库存数用完后,下单页面的库存数没有刷新,出现下单数超过库存数,若支付的订单数超过库存数,则会出现支付失败。
秒杀扣减并定时人工释放库存
目前直播带货已经非常的火爆了,很多主播上单都是秒清库存的状态,但是也有很多人在直播间只下单不付款,以抖音为例,经常会看到主播让大家抓紧付款,否则就要释放了,由此可见抖音电商使用的就是预减库存,人工可以释放库存的方式。
方案的思路就是:
先下单 扣减库存 如果没有付款,指定时间后自动释放库存 如果是秒杀商品,库存被恶意占用,商家可以人工去通知大家,并手动释放没付款的那些库存给没有抢到的人去抢购 如果有人恶意占大量库存,也可以设置一个限购数量
结论
各种方案都可以,但是超卖问题必须解决,后续可以根据场景,比如是秒杀,还是直播间,活着普通的购物方式,选择合适的方案。
参考文档: 《扣减库存方案》《浅析扣减库存的方案设计》
边栏推荐
- Acrel-5010重点用能单位能耗在线监测系统在湖南三立集团的应用
- MongoDB快速上手
- Zheng Xiangling, Chairman of Tide Pharmaceuticals, won the "2022 Outstanding Influential Entrepreneur Award" Tide Pharmaceuticals won the "Corporate Social Responsibility Model Award"
- 【torch】张量乘法:matmul,einsum
- Use WeChat official account to send information to designated WeChat users
- 第57章 业务逻辑之业务实体与数据库表的映射规则定义
- 根据Uniprot ID/PDB ID批处理获取蛋白质.pdb文件
- 因斯布鲁克大学团队量子计算硬件突破了二进制
- 用户身份标识与账号体系实践
- 多线程之生产者与消费者
猜你喜欢

卷积神经网络(CNN)mnist数字识别-Tensorflow

Does LabVIEW really close the COM port using VISA Close?

Acrel-5010重点用能单位能耗在线监测系统在湖南三立集团的应用

为什么限制了Oracle的SGA和PGA,OS仍然会用到SWAP?
Godaddy域名解析速度慢问题以及如何使用DNSPod解析解决

基于FPGA的任意字节数(单字节、多字节)的串口(UART)发送(含源码工程)

Oracle排序某个字段, 如果这个varchar2类型的字段有数字也有文字 , 怎么按照数字大小排序?

StringTable详解 串池 性能调优 字符串拼接

30-day question brushing plan (5)

vant实现Select效果--单选和多选
随机推荐
Failed to re-init queues : Illegal queue capacity setting (abs-capacity=0.6) > (abs-maximum-capacity
大神经验:软件测试的自我发展规划
给定中序遍历和另外一种遍历方法确定一棵二叉树
线上问题排查常用命令,总结太全了,建议收藏!!
Little data on how to learn?Jida latest small learning data review, 26 PDF page covers the 269 - page document small data learning theory, method and application are expounded
密码学的基础:X.690和对应的BER CER DER编码
【luogu P1912】诗人小G(二分栈)(决策单调性优化DP)
XSS range intermediate bypass
【kali-信息收集】(1.2)SNMP枚举:Snmpwalk、Snmpcheck;SMTP枚举:smtp-user-enum
Hangao data import
第59章 ApplicationPart内置依赖注入中间件
Wildcard SSL/TLS certificate
Interpretation of the meaning of each dimension of two-dimensional, three-dimensional, and four-dimensional matrices
Goroutine Leaks - The Forgotten Sender
【Untitled】
【kali-信息收集】(1.3)探测网络范围:DMitry(域名查询工具)、Scapy(跟踪路由工具)
The graphic details Eureka's caching mechanism/level 3 cache
【Untitled】
"No title"
泰德制药董事长郑翔玲荣膺“2022卓越影响力企业家奖” 泰德制药荣获“企业社会责任典范奖”