连载中 6/15

库存模型:扣库存的三种时机

2026-09-05 · 671 阅读 · 0 评论 · 0 赞

代价不对称的两种错误

库存管理的两种错误,代价完全不对称:超卖——卖出 82 台只有 50 台货,违约、赔付、订单取消、舆情发酵,平台信用受损;少卖——本来能卖 50 台只卖了 48 台,少赚两台的利润,仅此而已。宁可少卖,不能超卖——这条不对称原则贯穿所有库存方案的设计。但少卖多了也是事故:活动结束还剩 30 台没放出来,同样是事故级别的舆情。目标态是:不超卖,尽量不少卖。

下单减库存:防超卖最强,怕占坑

下单即扣库存,订单与库存同生共死:防超卖最彻底,扣减成功才有订单;缺点是库存被"占"——下单不付款的用户会长期占着库存,恶意脚本批量下单更能把库存占空,真买家反而抢不到。适合意向强烈、下单即买定离手的场景,或者配合限购与订单超时回收使用。

支付减库存:体验最好,怕超卖

支付成功才扣库存:下单时只校验不锁定,付款瞬间才真正扣减。下单零门槛,转化率最高;但支付那一刻才发现没库存,就是支付超卖——用户付了钱没货,比下单失败恶劣十倍。适合库存宽裕的常态销售,不适合秒杀:秒杀的库存是极稀缺的确定值,支付校验拦截率会很高,体验崩塌。

预扣加超时回补:折中的主流答案

把两者折中:下单时预扣库存,生成待支付订单,限时(如 15 分钟)不支付则关单回补。防超卖接近下单减(预扣即锁定),占坑风险靠超时回补化解,转化体验接近支付减(下单顺畅)。代价是复杂度:要有关单机制、回补机制、两者的幂等与竞态处理——这三件事,正是后面几篇的内容。

模式超卖风险占坑风险适合场景
下单减库存最低强意向下单,配限购
支付减库存库存宽裕的常态销售
预扣+超时回补低(限时回补)秒杀、稀缺资源

秒杀的答案:预扣

秒杀场景选定预扣模式后,还有最后一个问题:预扣动作放在哪执行?数据库预扣——就是开篇事故里被打满的热点行,锁竞争扛不住;Redis 预扣——内存原子操作,单实例十万级 QPS,是数量级的跃迁。链路定型为:Redis 预扣资格 → 扣成功才发消息 → 异步落库成单 → 超时未支付关单回补。下一篇就把这条链路的核心——Lua 原子扣减的完整实现——拆开讲。

503

10 年全栈工程师 · 503咖啡馆主理人

#库存模型#超卖#下单减库存#支付减库存#预扣

评论 (0)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 5 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞