window.location.href如何多次请求_Java学习五分钟系列:高并发情况下如何保证接口的幂等性...

Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念、优缺点和适用场景,想要深入的了解,还需要投入更多的时间。

什么是接口的幂等性

首先来看看什么是幂等性:用户对同一操作请求了一次或者多次,最终的结果是一致的,并不会因为多次请求产生副作用。

比如客户在网页上购买商品后付款的时候,点击了付款,支付成功已经扣款,但是由于网络的原因导致扣款成功的提示没有显示在页面上。这时候客户认为付款失败,于是又点击了付款,结果第二次付款也成功了。那么这样就是有问题的。

ca0904e3d548adf221a872fa663ceaa3.png

分布式系统接口幂等

所有的接口操作,不外乎就是增删查改。

  • 查询操作,天然的具有幂等性,查询一次和查询多次,并不会对数据和查询结果产生影响;
  • 删除也具有幂等性,只不过第一次删除成功后,后面的操作会找不到数据;
  • 更新操作分为两种情况:情况一,把数据更新成新的值,之中情况更新多次并没有什么影响;但是如果更新操作是根据现在的值进行计算,得到的结果后更新,这时候就会有问题,例如例子中的扣款,就是在原有的基础上做减法;
  • 插入是会有幂等影响的,多次插入会产生多余的数据。
1a1a77ab1dac964c4a1ee8fef9899139.png

如何保证接口的幂等性

方案一,每一次的请求,都有一个全局唯一的请求ID,这个请求ID只要执行过一次就失效了:

  • 获得请求ID。
  • 调用接口,同时传递请求ID。
  • 交易前判断请求ID是否存在,如果存在直接返回结果;如果不存在,则执行交易后返回结果,同时记录请求ID。

方案二,数据中增加版本号的概念,那么在做数据修改,把当前数据的版本号带上,修改的时候要按照版本号判断数据是否发生过更改。如果没有发生过更改,则执行业务操作,并更新版本号。翻译成伪代码就是:

if(数据version == 请求传过来的version){

执行业务操作();

version = version + 1;

}else{

提示执行失败();

}

af116a096dca374d7cb18fb3519caa9f.png

接口的重复调用,可能会产生不可预测的问题,一定要避免。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值