外观
一句话答案
同一操作执行多次结果一致,方案:唯一请求 ID + 去重表、Token 机制、乐观锁 version、业务状态机。
核心要点
常见方案:
| 方案 | 适用 |
|---|---|
| 唯一请求ID + 去重表 | 通用 |
| Token 机制 | 表单提交防重 |
| 乐观锁(version) | 更新操作 |
| 状态机 | 有状态流转的业务 |
数据库层: INSERT ... ON DUPLICATE KEY / 唯一索引
追问与易错
追问方向:
- 幂等和去重一样吗?
- 乐观锁实现幂等的限制?
- 你项目的幂等怎么做的?
易错点:
- ❌ 数据库自动保证幂等——INSERT 和 a=a+1 不是幂等的
- ❌ 加了唯一索引就幂等——只解决 INSERT
💡 记忆锚点
幂等就是"按电梯按钮":按一次和按十次效果一样,电梯只来一趟。四种实现:唯一请求ID+去重表(万能方案)、Token先领后用(防表单重复提交)、乐观锁version(防并发更新)、状态机(只能单向流转如待付款→已付款→已发货,不能倒退)。