自动发卡最怕两种事故:明明有货却提示缺货,明明没货却发出去了。前者损失转化,后者损失口碑。
【原因一:并发扣减没有原子性】
多个请求同时读到同一条卡密,各自取走再写回,就会重复发放。修复方式:用数据库条件更新(UPDATE … WHERE stock > 0)或行锁把扣减做成原子操作,影响行数为 0 就说明抢输了。
【原因二:缓存与真实库存不一致】
库存放在缓存里、发货走数据库,两边不同步就会超卖。修复方式:库存只以数据库为准,缓存只做展示;或者在商品保存时统一清缓存。
【原因三:规格库存错配】
商品有 10 档规格,扣减时只扣了总库存没扣档位库存,客户就会看到「这档还有货」但实际发不出。修复方式:扣减必须精确到 spec_index,并把剩余量写回该档。
【日常排查清单】
1. 每日对比「订单已发货数」与「卡池实际减少数」,差额超过 1% 就要查;
2. 对低库存档位(<5)做前台提示与后台告警;
3. 保留每单的卡密快照,出现争议时能原样复现。
