一、什么是幂等性
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条.,这就没有保证接口的幂等性
二、哪些情况需要防止
用户多次点击按钮
用户回退页面再次提交
微服务互相调用由于网络问题,导致请求失败。feign触发重试机制。
三、什么情况下需要幂等
幂等的操作
查询一次和查询多次,在数据不变的情况下,查询结果是一样的。
更新一条数据的某个值(不包含运算操作),无论多少次最终结果都是一样的
删除一次和多次删除都是把数据删除。
新增若根据数据的唯一主键插入,即使重复插入也只会是一条数据
不幂等的操作
不带主键的新增不是幂等的
更新一条数据的值,如减库存操作不是幂等的
注:一个业务的一条sql运行两次最后结果不一样就不是幂等的(出现异常除外)
四、幂等解决方案
1.建立唯一索引,防止新增脏数据
当表存在唯一索引,并发时新增重复记录就会报错,那么这时候就查询已存在的记录并返回即可。
1.Token机制,防止页面重复提交