What does "idempotent" mean?

是由拉丁语词根组合出来的数学术语:

  • idem:相同、同一个
  • potent:有能力的、有作用的,源自“力量、幂”

合起来大致是“保持同样作用”或“重复作用,效果不变”。

案例

比如“把订单状态设置为已付款”:

第一次执行:

未付款 → 已付款

网络超时后,客户端不知道是否成功,于是又执行一次:

已付款 → 已付款

无论执行一次还是十次,最终都是“已付款”,不会重复扣款。这就是幂等。

相反,“给账户扣款 100 元”通常不是幂等操作:

执行一次:余额减少 100 元
执行两次:余额减少 200 元

所以支付系统一般会给每次付款设置唯一的订单号或请求编号。相同编号重复提交时,系统直接返回第一次的处理结果,避免重复扣款。