文章目录
一、什么是幂等性
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
比如支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现扣了双倍钱,流水记录也变成了两条。这就是没有保证接口的幂等性。
二、哪些情况需要防止
- 用户多次点击按钮
- 用户页面回退再次提交
- 微服务互相调用,由于网络问题,导致请求失败,feign触发重试机制
- 其他业务操作
三、什么情况下需要幂等
以sql为例,有些操作是天然幂等的。
Select * from table where id = ?;
无论执行多少次都不会改变状态,是天然的幂等。
update table set col1 = 1 where col2 = 2;
无论执行成功多少次状态都是一致的,也是幂等操作。
delete from user where userid = 1;
多次操作,结果一样,也具备幂等性
insert into user(userid ,