怎么理解接口幂等,项目中如何保证的接口幂等

都 2024 年了,竟然还有人不知道接口幂等是什么东西。
hi,大家好,我是 浮生

今天正好有空,给大家分享一下 幂等的实现。 什么是幂等?

一、问题解析

简单来说,就是一个接口,使用相同的参数重复执行的情况下,对数据造成的改变只发生一次。
比如支付操作,如果支付接口被重复调了 N 次,那资金的扣减只发生一次,这就是幂等。有同学会比较好奇, 这个事情不是很正常吗?为什么还要单独拧出来说。原因很简单{如图}, 在分布式架构中,由于引入了网络通信导致一个请求,除了成功/失败以外,还多了一个未知状态。

也就是如果一次远程接口调用失败,有可能这个请求在服务端执行成功了。而客户端为了确保本次请求执行成功,可能会发起重试的操作,导致同一个接口被重复调用了多次。 为了保证服务端接口的幂等性,我们就需要在服务端的接口中去识别当前请求是重复请求,从而不再进行数据的变更操作。
通常的解决方案有几种。
31. 使用数据库唯一索引的方式实现, 我们可以专门创建一个消息表,里面有一个消息内容的字段并且设置为唯一索引,每次收到消息以后生成 md5 值插入到这个消息表里面。一旦出现重复消息,就会抛异常,我们可以捕获这个异常来避免重复对数据做变更。
32. 使用 Redis 里面的 setNx 命令,我们可以把当前请求中带有唯一标识的信息存储到Redis 里面,根据 setNx 命令返回的结果来判断是否是重复执行,如果是则丢弃该请求。
33. 使用状态机的方式来实现幂等,在很多的业务场景中,都会存在业务状态的流转,并且这些状态流转只会前进,所以我们在对数据进行修改的时候,只需要在条件里面带上状态,就能避免数据被重复修改的问题。

二、问题总结

当然,除了这几种方法以外,肯定还有其他更多的解决方案。不管采用哪种方案,核心本质都是需要去识别当前请求是重复请求。当然,如果大家还有更好的方案,可以在评论区留言。

三、粉丝福利

最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍、 需要的小伙伴 可以关注我
公众号:"灰灰聊架构", 回复暗号:"321"即可获取

相关推荐
郑州光合科技余经理16 小时前
海外版生活服务系统源码 | 外卖+跑腿一站式平台技术解析
java·开发语言·javascript·git·spring cloud·php·生活
小小Fred16 小时前
Cortex-M3 LR寄存器的特殊值EXC_RETURN
java·开发语言·jvm
小小心愿家16 小时前
线程——对于锁的进一步认识
java·开发语言
曹牧16 小时前
Java: FATAL ERROR: processing of -javaagent failed
java·开发语言
小贝IT~16 小时前
基于SpringBoot的图书个性化推荐系统-048
java·spring boot·后端
断春风16 小时前
SpringBoot 集成 XXL-JOB
java·spring boot·后端
橘子海全栈攻城狮16 小时前
【最新源码】基于springboot的会议室预订系统设计与实现 014
java·开发语言·前端·spring boot·后端·spring·自动化
另寻沧海16 小时前
C++ Lambda表达式的隐式转换陷阱
java·c++·算法
菜鸟233号16 小时前
力扣654 最大二叉树 java实现
java·算法·leetcode
小张程序人生16 小时前
《系统掌握 ShardingSphere-JDBC:分库分表、读写分离、分布式事务一网打尽》
java·mysql