欢迎来到 秦皇岛市某某自控阀门培训中心
全国咨询热线:020-123456789
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
什么是幂等性?四种接口幂等性方案详解
  来源:秦皇岛市某某自控阀门培训中心  更新时间:2024-05-03 02:38:14

什么是幂等性?四种接口幂等性方案详解

什么是幂等性?四种接口幂等性方案详解

原文链接:
https://mikechen.cc/15027.html

幂等性在我们的工作中无处不在,无论是等性等性支付场景还是下订单等核心场景都会涉及,也是种接分布式系统最常遇到的问题 ,除此之外 ,口幂也是详解大厂面试的重灾区  。

知道了幂等性的什幂重要性,下面我就详细介绍幂等性以及具体的等性等性解决方案 ,希望对大家有所帮助@mikechen

什么是种接幂等性

幂等是一个数学与计算机学概念 ,在数学中某一元运算为幂等时,口幂其作用在任一元素两次后会和其作用一次的详解结果相同。

所谓接口幂等性 ,什幂就是等性等性一次和多次请求某一个资源对于资源本身应该具有同样的结果 。

什么是幂等性?四种接口幂等性方案详解

也就是说,在接口重复调用的口幂情况下 ,对系统产生的详解影响是一样的 ,这就是幂等性 。


为什么需要幂等性

业务开发中 ,经常会遇到重复提交的情况,无论是由于网络问题无法收到请求结果而重新发起请求,或是前端的操作抖动而造成重复提交情况。

在交易系统 ,支付系统这种重复提交造成的问题有尤其明显 ,比如:用户在APP上连续点击了多次提交订单  ,后台应该只产生一个订单。

什么是幂等性�?四种接口幂等性方案详解

再比如 :向支付宝发起支付请求,由于网络问题或系统BUG重试 ,支付宝应该只扣一次钱,而不是多次重试 ,造成多次扣钱 。

什么是幂等性

?四种接口幂等性方案详解

再比如 :现在是微服务的时代 ,服务化接口在外部调用者会存在多次调用的情况(考虑网络中断重试等) ,为了防止外部多次调用对系统数据状态的发生多次改变,将服务设计成幂等 ,就是为了防止多次重试 ,造成系统不一致的问题 。

通过以上典型的支付场景就知道幂等性的重要性了 ,那问题来了 ,如何实现幂等性 ,有哪些解决方案?下面我们接着聊。

幂等性的解决方案

数据库唯一主键

数据库唯一主键的实现主要是利用数据库中主键唯一约束的特性 ,一般来说唯一主键比较适用于“插入”时的幂等性,其能保证一张表中只能存在一条带该唯一主键的记录。

唯一索引 使用唯一索引可以避免脏数据的添加  ,当插入重复数据时数据库会抛异常 ,保证了数据的唯一性。

唯一索引表的创建示例如下 :

CREATE TABLE `table_name` (n `id` int NOT NULL AUTO_INCREMENT,n `orderid` varchar(32) NOT NULL DEFAULT '' COMMENT '唯一id',n PRIMARY KEY (`id`),n UNIQUE KEY `uq_orderid` (`orderid`) COMMENT '唯一约束'n) ENGINE=InnoDB;

使用数据库唯一主键完成幂等性时需要注意的是,该主键一般来说并不是使用数据库中自增主键 ,而是使用分布式 全局ID 充当主键 ,这样才能能保证在分布式环境下 ID 的全局唯一性 。


数据库乐观锁

数据库乐观锁方案一般只能适用于执行“更新操作”的过程,我们可以提前在对应的数据表中多添加一个字段,充当当前数据的版本标识。

这样每次对该数据库该表的这条数据执行更新时,都会将该版本标识作为一个条件 ,值为上次待更新数据中的版本标识的值 。

select version from tablename where xxx

更新数据时首先和版本号作对比 ,如果不相等说明已经有其他的请求去更新数据了 ,提示更新失败 。

update tablename set count=count+1,version=version+1 where version=#{ version}


PRG 模式

Post/Redirect/Get 是一种 web 开发设计模式 ,用于防止表单的重复提交 。

默认情况,提交 Post 请求到服务器后 ,如果直接刷新浏览器,会重新在提交一次 Post 请求 。

什么是幂等性?四种接口幂等性方案详解

在访问电商网站时,提交订单采用的是 Post 请求,如果直接刷新浏览器就容易导致重复订单的提交 ,这个不是用户希望发生的行为 。

PRG 方法就是用户防止这种现象的发生,下面例图描述了用 PRG 方法来避免 Post 请求的重复提交。

当服务器处理完 Post 请求后,会发响应给用户浏览器,指示用户浏览器用 Get 方式立刻访问另一条 URL ,用户浏览器拿到 Get 请求的数据,整个流程才算结束 。

什么是幂等性?四种接口幂等性方案详解

此时用户刷新当前页面,也不会引起 Post 请求的重复提交了 。

防重 Token 令牌

针对客户端连续点击或者调用方的超时重试等情况,例如提交订单 ,此种操作就可以用 Token 的机制实现防止重复提交 。

简单的说就是调用方在调用接口的时候先向后端请求一个全局 ID(Token),请求的时候携带这个全局 ID 一起请求(Token 最好将其放到 Headers 中),后端需要对这个 Token 作为 Key ,用户信息作为 Value 到 Redis 中进行键值内容校验 ,如果 Key 存在且 Value 匹配就执行删除命令,然后正常执行后面的业务逻辑。

什么是幂等性
?四种接口幂等性方案详解

如果不存在对应的 Key 或 Value 不匹配就返回重复执行的错误信息,这样来保证幂等操作。

上面我只是列举了解决幂等性的解决方案与思路  ,其实还有很多类似解决方案 ,比如订单流程还可以结合前段拦截 ,以及更多的后端方案来保障唯一性 。

这些还需要结合你的实际业务场景 ,来最终来选择更适合你的解决方案,但是万变不离其中 ,都是为了保证一次操作 ,保证唯一约束,这才是幂等性的本质 。

以上!

什么是幂等性?四种接口幂等性方案详解什么是幂等性?四种接口幂等性方案详解

友情链接《魔兽争霸3冰封王座》v1.27a次元之战v2.1.4正式版dnf金币上限(dnf金币上限是角色还是账号)王者荣耀四周年版本有哪些新内容 四周年版本更新内容一览(3)《英雄联盟》暗爪乌迪尔秒人连招一览LOL艾克6.6版本上单玩法 不灭之握坦装艾克来袭战斗在太阳井高地——猛击流输出心得炉石传说外服新手奖励 怎么获取并最大化利用【110版本:职业百科】COLG全职业百科一一流浪武士(更新至神界版本),沃特碧们的Colg,DNF地下城与勇士英雄联盟乌迪尔打野玩法技巧,乌迪尔技能如何正确加点《伊苏6:纳比斯汀的方舟》简体中文汉化版PSP版《阴阳师》现世召唤怎么玩 和普通召唤有什么区别魔兽世界怀旧服:如果以后TBC开放后,有哪些职业能单刷老虎?《魔兽世界怀旧服》送往奥格瑞玛的肉任务怎么做 送往奥格瑞玛的肉任务完成攻略加拿大签证表格一系列问题哪位大侠有过了加拿大旅游签证,来回答下我的问题(1)5257有个关于就业的那一栏现在的职业也要填吗?那时间写到哪天了,因为我还继续在公司上班啊? (2)关于未成年填表格签名问题是父母帮他签没错,那是签小孩子的名字还是父母的名字?电子签可以吗?(3)5645家庭表大家的拼音名字怎么写,是先写姓还是先写名?(4)国外...7723游戏盒最新版4.8.42023大型网络手游3d游戏排行榜大全 热门的3d手游合集dnf格斗大赛装扮兑换券怎么获得 dnf格斗大赛装扮兑换券怎么领QQ飞车跳舞辅助舞动赛道,极速飞跃魔兽世界怀旧服史诗武器大全 全史诗武器效果介绍 克洛玛古斯之爪同人圣三国蜀汉传攻略大芒果魔兽世界335GM命令.docLOL11.3版本上单鳄鱼玩法出装DNF昂贵一时的材料,你回忆到了几个?魔兽世界9.2:通灵奶骑大秘境攻略2021年至尊宝皮肤会返场吗《阴阳师》现世召唤怎么玩 和普通召唤有什么区别英雄联盟乌迪尔打野玩法技巧,乌迪尔技能如何正确加点Need for Speed™ Unbound Vol. 6.1.0 Patch Notes暑假在家就能做的网上兼职赚钱Dnf怎么净化装备(Dnf旅人未赋予武器属性)《房间的秘密3》第五章 攻略为了闪把光,一局磕了4个币加3瓶复活水[2024手游私sf平台排行榜 十大私服手游平台推荐《仙剑奇侠传五前传》v1.03升级补丁+梦华幻斗DLC两台手机联机一起玩的游戏有哪些2022 有什么能两台手机联机的游戏推荐LOL2023鳄鱼符文怎么点,lol鳄鱼怎么玩[十周年][公告]2月4日《三国杀十周年》版本更新公告DNF:盘点那些在决斗场封神的职业,一个比一个厉害,不要小看他《堡垒之夜》(fortnite)这款游戏好玩吗?英雄联盟LOL新手出装专题第二期
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

6.5454

Copyright © 2024 Powered by 秦皇岛市某某自控阀门培训中心   sitemap