仓储系统的并发和幂等怎么做重复出入库、锁库存、状态约束一次讲透这篇直接按仓储并发和幂等来拆不只讲“加锁”而是把重复出入库、库存占用、状态约束和补偿讲具体。目标是你看完后能把仓储并发问题从“偶现 bug”升级成可设计、可防守的工程问题。个人主页GitHub主页文章目录仓储系统的并发和幂等怎么做重复出入库、锁库存、状态约束一次讲透先看真实业务为什么这块在仓储里总是容易出事真实业务场景我会怎么抽象举个具体例子放到项目里会怎么跑代码示例用幂等键避免重复建单核心数据模型我会怎么定系统设计我会优先拆哪几块幂等校验层状态约束层并发控制层补偿回滚层跨系统协同时哪些边界最重要监控和审计建议怎么做高频坑位复盘1. 只靠数据库锁解决一切2. 只做接口幂等不做状态约束面试里我会怎么答结语先看真实业务为什么这块在仓储里总是容易出事仓储链路天然高并发出库、入库、释放库存、回滚库存经常同时发生。同一订单可能重复触发出库或取消高峰期多个请求可能同时抢同一批库存消息重复消费会让库存多扣或多加真实业务场景我会怎么抽象订单支付成功触发锁库存订单取消又触发释放库存仓库作业回调可能重复上报先定义业务幂等键库存变更先检查状态约束和幂等记录真正落账后写流水和幂等结果异常时通过补偿或回滚单恢复一致性举个具体例子放到项目里会怎么跑比如履约系统重复推送了两次“订单已支付”如果仓储侧没有幂等和状态约束就可能重复预占库存、重复生成出库单。先对外部请求带上业务幂等号。落单前先查幂等记录已处理过就直接返回。同一单据状态流转要做前置校验。库存扣减和单据状态更新放在同一个事务里。代码示例用幂等键避免重复建单TransactionalpublicvoidcreateIfAbsent(StringidempotentKey,Runnableaction){booleanfirstidempotentRepo.tryInsert(idempotentKey);if(!first){return;}action.run();}核心数据模型我会怎么定建议拆库存变更幂等表、库存流水表、状态约束表幂等键至少要和来源单据、动作类型绑定系统设计我会优先拆哪几块幂等校验层同一来源单据和动作只允许成功一次重复请求直接返回已有结果状态约束层例如未锁定不能释放、未发运不能到货通过状态机防止非法流转并发控制层按 SKU仓或更细粒度做锁控制避免全表锁影响吞吐补偿回滚层失败后走正式补偿单或回滚单不要直接手改余额跨系统协同时哪些边界最重要幂等键由来源业务和仓储共同约定仓储只保证库存口径不负责业务方消息顺序回滚动作也要幂等监控和审计建议怎么做重复请求命中次数并发冲突次数库存超卖/负库存告警补偿单数量高频坑位复盘1. 只靠数据库锁解决一切吞吐和复杂链路都会吃不消2. 只做接口幂等不做状态约束非法状态流转仍然会把库存搞乱面试里我会怎么答如果面试官问仓储并发和幂等怎么做我会先讲幂等键再讲状态机约束然后讲细粒度锁和补偿回滚。因为仓储并发真正难点不是“会不会锁”而是相同请求和不同请求同时进来时库存账还能不能保持正确。结语仓储并发治理的关键不是锁得有多狠而是让幂等、状态约束和补偿回滚一起协同。想继续看哪块评论区留个 1 或 2 就行1 库存幂等键2 状态机约束