Skip to content

⏳ 分布式幂等性(防重复提交)

防重复提交功能为防止两条相同的数据重复提交,导致脏数据或业务错乱。 提供声明式的幂等特性,可防止重复请求。 如:用户快速的双击了某个按钮,或弱网、网络慢、页面卡顿等情况下重复点击,前端没有禁用该按钮,导致发送了两次重复的请求及数据。

重复提交的真实场景

下场景都可能导致重复提交:

  • 用户点击“提交订单”按钮多次(网络慢、页面卡顿);
  • 前端因网络异常自动重试请求;
  • 支付系统中用户刷新页面重复支付;
  • 后端服务处理较慢,用户误以为没提交成功。

接口幂等性是什么?

接口幂等性是指无论调用多少次,结果都是一样的。

为什么需要做接口幂等性 ?

在接口调用中,由于网络等原因,可能会导致接口被重复调用,如果接口不具备幂等性,就会导致数据的重复插入、更新等问题。因此,需要做接口幂等性来保证接口的正确性和数据的一致性。

实现接口幂等性

实现接口幂等性校验可以通过在接口中添加唯一标识符,如UUID或者请求时间戳等,来判断是否重复调用。同时,还可以通过在接口中添加状态码等方式来判断接口是否已经被调用过。

常见解决方案对比

方案优点缺点
数据库唯一约束简单可靠侵入性强,可能影响性能
接口幂等ID解耦,灵活需要调用方配合
Token机制(一次性Token)轻量、独立、通用依赖缓存系统
Redis分布式锁精准控制实现复杂、需注意死锁

实现方式

防止重复提交(参考美团GTIS防重系统)

注解方式(基于AOP切面实现)

Token机制防重复提交(基于Redis)

拦截器+注解实现防止表单重复提交