数据库
Redis扣减库存失败不回滚?专家称防超卖优先属合理取舍
📋总体概括
微博用户小馒头youky讨论高并发场景下的架构取舍:某项目中用Redis扣减库存、数据库持久化,当下游消息发送失败时仅记录日志,不回滚Redis库存。回答认为这是合理设计——优先防止超卖,接受暂时少卖,因为消息发送结果可能不确定(Kafka可能已收到但响应丢失),此时回滚反而可能导致超卖。该案例体现了分布式系统中一致性、可用性与业务安全之间的典型tradeoff思维。
⚡关键信息
- ▸场景:Redis扣减库存+数据库持久化+Kafka消息投递的典型高并发架构
- ▸争议点:消息发送失败只记log,不做Redis库存+1的补偿回滚
- ▸结论:该取舍合理,核心目标是优先防超卖,宁可暂时少卖
- ▸关键原因:消息发送结果不确定,Kafka可能已收到但网络响应丢失,盲目回滚会引入超卖风险
🔥犀利点评
这是教科书级的『少卖优于超卖』取舍,逻辑成立。但别只停在『记log』——没对账、没补偿任务的方案只是把一致性债务往后拖。正确姿势是log进异步对账队列,人工或定时任务校准Redis与DB差异。纯靠log的『合理取舍』在面试里能过关,在生产里就是埋雷,量一大少卖滚成资损客诉。
📰 相关资讯(与本文相关的其他资讯)
本文由本站自动聚合,以下为原始来源:前往 微博-数据库关键词 阅读全文 →