Skip to content
极高进阶

一句话答案

同一操作执行多次结果一致,方案:唯一请求 ID + 去重表、Token 机制、乐观锁 version、业务状态机。

核心要点

常见方案:

方案适用
唯一请求ID + 去重表通用
Token 机制表单提交防重
乐观锁(version)更新操作
状态机有状态流转的业务

数据库层: INSERT ... ON DUPLICATE KEY / 唯一索引

追问与易错

追问方向:

  • 幂等和去重一样吗?
  • 乐观锁实现幂等的限制?
  • 你项目的幂等怎么做的?

易错点:

  • ❌ 数据库自动保证幂等——INSERT 和 a=a+1 不是幂等的
  • ❌ 加了唯一索引就幂等——只解决 INSERT

💡 记忆锚点

幂等就是"按电梯按钮":按一次和按十次效果一样,电梯只来一趟。四种实现:唯一请求ID+去重表(万能方案)、Token先领后用(防表单重复提交)、乐观锁version(防并发更新)、状态机(只能单向流转如待付款→已付款→已发货,不能倒退)。