# 实际开发过程中,怎么防止接口重复提交?

这个问题涉及的知识点非常的广。解决的方案有许多。下面给出了逻辑上说的过去的方案。缺乏实战。都是停留在理论上。

# 涉及的问题

比如用户重复点击个按钮,导致重复订单创建或者重复扣费。

核心是考察接口的幂等性设计。——所谓幂等性,就是让一个接口的多次调用对数据只产生一次影响。

# 理论上的解决方案

有三种方案。

第一个,你可以利用数据库的唯一索引,一旦重复创建相同数据,就可以触发索引的冲突异常。这种适合创建类的场景。

第二个,你可以基于 Redis 来实现。用户的请求到达以后,你用业务标志加上用户 ID 来生成一个唯一的 key。通过 SETNX 命令来去尝试获得锁,获得锁成功就执行业务逻辑。

假如:用业务标志是user,用户id为:1.则:user:1就是redis的key。

user:1
1

redis的SETNX命令作用是什么?

第三个,你可以前端去携带一个唯一的ID,后端接收到以后呢,去先查缓存或者数据库,判断这个 ID 是不是已经处理过了。如果已经处理了,就直接返回结果,不重复执行。

Last Updated: 2/16/2026, 6:43:45 AM