CS-Notes 学习笔记
Java 后端 · 系统设计

Redis 预扣库存成功、订单却创建失败,怎样保证两边一致?

先自己想一想,再看参考要点

参考要点

  • 以数据库的库存和订单为准,Redis 库存只是闸门,允许暂时少卖,数据库条件更新始终保留
  • 发送消息明确失败时执行反向脚本回补,发送超时(消息可能已送达)或应用宕机交给对账,也可以用事务消息
  • 订单因业务原因失败时回补 Redis,异常失败靠消息重试,唯一索引防止重复建单
  • 回补先 SREM 已购集合、返回 1 才加库存,允许再次抢购时还要核对请求 ID
  • Redis 主从切换丢失扣减时由数据库兜底,因数据库库存不足失败的请求,确认这个用户没有订单后只移出已购集合、不加回库存
  • 活动后对账
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。