一 概述
接口的幂等性是指用户对于同一操作发起的一次请求或者多次请求的结果是一致 ,而不会因为多次请求而产生其他副作用。
例如支付场景,当用户支付扣款完成,但是在返回结果的时候出现网络异常,此时已经完成了扣款,当此时用户再次点击的时候,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣了钱,此时流水记录就变成了两条。
上述场景即为未保证接口的幂等性。
二 需要防止的情况
- 用户多次点击提交按钮的时候。
- 用户页面回退再次进行提交。
- 微服务互相调用,由于网络问题,导致请求失败,Feign出发了重试机制。
以上为常见的接口幂等的情况,其他情况还需进一步了解,核心在于多次请求导致数据的不一致问题。
三 需要幂等性的情况
以SQL为例,有些操作本身就是满足幂等的,如一般情况下根据表的主键进行的查询,更新,删除操作等。
不满足幂等的情况:
update tab1 set col1 = col1 + 1 where col2 = 2,每次执行的结果都会发生变化,不是幂等的。
insert into user(userid,name) values(1,'a') ,当userid 不是主键,可以重复,那上面业务多次操作,数据都会新增多条,不具备幂等性。
四 幂等的实现
未完待续。。。