我终于搞懂了幂等:先亲手把客户扣两次款
来源:dev.to — 2026-10-18
📋 概述
作者承认自己在会议上假装听懂幂等这个词装了很久。定义其实一句话:一个操作执行多次和执行一次效果相同。真正难的不是定义,是认出它在哪一层起作用。他的比喻很管用:电梯按钮是幂等的——按一次电梯来,你迟到了狂按十二次,电梯还是只来一次;自动售货机按钮不是——按两下出两瓶汽水,钱包少两笔。你的应用大部分是电梯按钮,少数是售货机,事故出在售货机被误按了第二次。然后他用 Express + TypeScript 写一条付款路由,故意制造重复扣款,再分三步修:先查再扣、指出「查到扣款之间」那个窗口、最后上幂等键。结尾他追问一个常被跳过的问题:凭什么让客户端来挑这个键。
🔑 核心要点
- 电梯按钮/售货机按钮的比喻,一眼分清哪些代码必须幂等。
- 「先查再扣」不够:查和扣之间存在窗口,并发请求照样穿过去。
- 幂等键是成熟的解法,但引入了新问题——键由客户端提供,你凭什么信任它。
- 全篇只用一个可跑的最小 Express + TypeScript 例子,不用数据库也能演示清楚。
💡 金句
An operation is idempotent if performing it multiple times has the same effect as performing it once.
译:一个操作如果执行多次和执行一次的效果相同,它就是幂等的。
← 返回 dev.to 首页