跳到主要内容
佳益手记

企业博客

技术专栏 · 发布 2026年10月5日

幂等设计:重复提交不只是用户手抖

网络重试、消息重投、用户连点,都会让同一个请求到达多次。幂等应该设计在接口里。

做过支付类功能的团队大多遇到过重复扣款。表面原因是用户点了两次,真正的原因是接口没有能力区分“第二次请求”和“一个新请求”。

重复从哪里来

用户连点是最简单的场景,前端按钮禁用能挡住大部分,但挡不住网络层的重试。

网关超时后自动重发、消息队列至少一次投递、定时任务补偿重跑,这三种情况在服务端都很常见。

移动端弱网环境下,请求可能已到达服务端但响应丢失,用户重新提交几乎是必然。

三种实现方式

业务唯一键:订单号、流水号或客户端生成的请求号,配合数据库唯一索引,重复请求直接被拒。

状态机校验:只有处于特定状态的记录才能被推进,已经完成的操作再次提交直接返回上次结果。

去重表:记录请求号与处理结果,重复请求返回缓存结果,适合跨服务调用。

幂等不是可选优化,而是接口契约的一部分。设计时多想一步,线上就少一次对账。

返回博客列表

想把文章里的方法用到您的项目里?

我们乐于分享更多实施细节,也欢迎您带着具体问题与我们交流。

开始一次对话 →
— 编辑部 · 佳益方圆EST. 2019 · JYFY