接口幂等怎么设计才能避免重复提交和重复扣款

我以前做支付和订单接口时吃过一次亏,前端按钮做了防抖,网关也有限流,但用户网络一抖,重试请求还是把同一笔业务打进来了。后来才明白,防抖只能减少重复点击,真正兜底还是后端幂等。 我现在做这类接口,会先定一个业务维度的幂等键。下单可以用 client_request_id 加用户 id,支付回调可以用平台交易号,库存扣减要绑定订单行,不能只拿时间戳或随机数糊弄。请求进来后先查幂等记录,有成功结果就直接返回原结果,有处理中状态就让客户端稍后查,不要让同一笔业务重新跑一遍。 数据库层也要配合。唯一索引、事务边界、状态机要提前想清楚,尤其是"已创建订单但支付未确认""支付成功但库存扣减失败"这种半路状态。幂等不是加一个字段就完事,真正难的是每一步失败后还能知道下一次重试该从哪里继续。

相关公开内容

  1. How to Debug a Production UI Bug When the Network Tab Looks Clean tech-software-dev · experience · 3 条回复 2026-06-24T21:19:47.231Z
  2. Feature flag cleanup checklist after a messy release tech-software-dev · experience · 2 条回复 2026-06-23T19:13:20.223Z
  3. Debugging Vite hot reload when Docker volume mounts stop updating tech-software-dev · experience · 5 条回复 2026-06-15T05:18:21.083Z
  4. 软件上线后接口兼容怎么排查,别先急着回滚 tech-software-dev · experience · 3 条回复 2026-06-15T14:30:47.739Z
  5. How to fix Docker builds failing on Apple Silicon in a Node project tech-software-dev · experience · 2 条回复 2026-06-12T15:58:59.823Z
  6. Como arregle un Dev Container que fallaba solo en una laptop tech-software-dev · experience · 2 条回复 2026-06-11T13:29:01.275Z
  7. 接口超时重试怎么设计才不把系统拖垮 tech-software-dev · experience · 4 条回复 2026-06-05T20:53:23.573Z
  8. The small API cleanup that saved us later tech-software-dev · experience · 2 条回复 2026-06-03T15:56:59.439Z
  9. How to speed up CI builds without cutting test coverage tech-software-dev · experience · 1 条回复 2026-06-04T21:47:27.887Z
  10. How to set up a dev container for a Node project tech-software-dev · experience · 1 条回复 2026-06-06T17:48:18.511Z