在大型电商系统中,幂等性是指同一操作多次执行的结果与一次执行的结果一致,避免因网络重试、系统超时、并发等导致的重复创建订单、重复支付、库存超卖等问题。解决幂等性需结合业务场景设计,核心是 “让重复请求被识别并安全忽略”。以下是典型场景及解决方案:
一、核心原则:设计幂等的前提
- 唯一标识:为每个请求生成唯一 ID(如订单号、请求 ID),用于识别重复请求。
- 状态控制:通过状态机(如订单 “待支付→已支付→已完成”)避免重复操作(如已支付的订单不能再次支付)。
- 原子操作:使用数据库锁、分布式锁等保证操作的原子性,防止并发导致的重复处理。
二、典型场景及解决方案
1. 订单创建:避免重复下单
问题:用户多次点击 “提交订单”,可能生成多个重复订单。解决方案:
- 唯一订单号 + 数据库唯一索引:
- 生成规则:用户 ID + 时间戳 + 随机数(确保全局唯一)。
- 订单表中对 “订单号” 加唯一索引,重复插入时数据库会抛出主键冲突异常,系统捕获后返回 “订单已创建”。
- 前端防重 + 后端校验:
- 前端:点击后禁用按钮,避免用户重复提交。
- 后端:接收请求时生成
requestId(如 UUID),存入 Redis(过期时间 5 分钟),重复请求直接返回已有结果。
2. 支付回调:避免重复支付
问题:支付平台(如支付宝、微信支付)可能因网络延迟重复发送支付成功回调,导致重复扣减库存、重复增加余额。
电商系统幂等性设计全解

最低0.47元/天 解锁文章
873

被折叠的 条评论
为什么被折叠?



