java接口幂等性设计
幂等性
用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。
发生幂等性问题的原因:
- 网络问题/用户误操作/恶意操作,用户点击多次
- 网络问题,微服务重试retry
insert接口幂等性
- 使用分布式锁保证幂等性。
秒杀场景下,一个用户只能购买同一商品一次,采用用户Id + 商品Id,存储到 redis 中,setNX操作,其自然过期。 - 使用token机制保证幂等性。
用户注册时,用户点击注册按钮多次,是不是会注册多个用户?我们可以在用户进入注册页面后由后台生成一个token,传给前端页面,用户在点击提交时,将token带给后台,后台使用该token作为分布式锁,setNX操作,执行成功后不释放锁,等待自然过期。 - 使用mysql unique key 保证幂等性。
用户注册时,用户点击注册按钮多次,是不是会注册多个用户?我们可以用手机号作为mysql用户表唯一key。
Redis 分布式锁介绍:链接
Zookeeper分布式锁介绍:链接
update接口幂等性
update操作可能存在幂等性问题。
- 用户更改个人信息,疯狂点击按钮,不会发生幂等性问题,因为数据始终为修改后的数据。
- 用户购买商品,用户在点击后,网络出现问题,可能再次点击,这样就会出现幂等性问题,导致购买了多次,可以使用 乐观锁。
update order set count = count-1 ,version = version+1 where id = 1 and version = 1
delete接口幂等性
- 根据唯一id删除不会出现幂等性问题,第二次删除mysql中已经不存在该数据。
- 假设需求是 删除未审批通过的报表,第一次删除了6个,第二次删除应该是0个,但在两次删除期间刚好来了个未审批通过的报表,第二次删除就变成了一个。也可以使用token机制,或者使用时间(用户进入页面时前端页面生成时间,当点击时将时间带给后台)
delete from t_form where status = 0;
select接口幂等性
查询操作不会改变数据,所以是天然的幂等性操作。
混合操作的幂等性
混合操作:一个接口包含多个操作。
使用token机制。
java接口幂等性设计相关推荐
- Java接口幂等性多种解决方案
Java接口幂等性的解决方案: java 语音中,同一个接口相同的参数多次和一次请求产生的效果是一样,这样的过程即被称为满足幂等性 //这中情况无论执行多少次,结果都不受影响,是幂等的. update ...
- 【案例分析】分布式系统的接口幂等性设计!
概念 幂等性, Idempotence, 这个词来源自数学领域, 百科 上一元运算的幂等性解释如下:设 f 为一由 {x} 映射至 {x} 的一元运算, 则 f 为幂等的, 当对于所有在 {x} 内的 ...
- java幂等性原理_Java接口幂等性设计原理解析
在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 当这笔订 ...
- 谈谈Java接口Result设计
这篇文章酝酿了很久,一直想写,却一直觉得似乎要讲的东西有点杂,又不是很容易讲清楚,又怕争议的地方很多,就一拖再拖.但是,每次看到不少遇到跟这个设计相关导致的问题,又忍不住跟人讨论,但又很难一次说清楚, ...
- 接口幂等性设计与实现
幂等 幂等(idempotent.idempotence), 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得 ...
- API接口幂等性设计
概念 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果. 例如 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果: 2. 我们发起一笔付款请求,应该 ...
- 后端开发之接口幂等性设计
一.天天在写Bug,好难哦 今天晨会结束后,领导叫上了陈同学,到会议室说,小陈啊,我现在手头有一个比较紧急的任务,需要你帮忙处理下.大致的情况是项目二组领导找他了,需要我们这边提供 ...
- java 接口api设计的注意事项_Java接口设计原则
类原则 1.单一职责原则 – Single Responsibility Principle(SRP) 就一个类而言,应该仅有一个引起它变化的原因. 职责即为"变化的原因". 2. ...
- java接口,设计一个动物声音模拟器
2.设计一个动物声音"模拟器",希望模拟器可以模拟各种动物的叫声,要求如下:必须使用接口或者抽象类:至少模拟两种以上的动物种类:类名方法名定义友好: 源代码如下: interfac ...
最新文章
- 小朋友也能看懂的机器学习
- 【速来抢】iPhone12、STM32开发板、1024元现金红包…打包免费送!!!
- 西瓜书+实战+吴恩达机器学习(十一)监督学习之集成学习
- hnu 暑期实训之Maya历法
- LVM 逻辑卷管理精讲
- POI操作Excel时Cannot get a text value from a numeric formula cell非法参数异常
- Un 进行攻击计时效果
- html表单-在线留言,aspcms自定义表单 在线留言修改
- (转F001) Rust : 解引用,自动解引用
- MIDL2011报错。
- python查找手册
- 山东工商学院计算机2军训,山东工商学院举行2018级新生开学典礼暨军训动员大会...
- Vue-router的使用
- c语言求100以内被7整除的最大自然数,编程,求100以内被7整除的最大自然数
- 局域网常用的几种网络拓扑结构及其特点。
- 扇贝一面----Android面经
- 企业文化在企业管理中的作用
- git 分支操作总结
- 【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备
- ceph radosgw-admin的操作
热门文章
- 全国计算机等级考试(NCRE)深圳考区报考--2021
- 基于SpringBoot的体育场馆运营管理系统的设计与实现
- 直播一对一源码主播美颜SDK代码分享
- 计算机清灰后无法联网,电脑清灰后无法开机?不要慌,请这样用排除法逐步排查问题-电脑打不开机怎么办...
- 苹果手机2019年什么时候出新款_提升信号表现 苹果改进iPhone 11天线设计
- ajax提交form表单数据serialize转为JSON
- 17岁女孩叛逆期谈恋爱,不回家怎么办
- 1011-甲流疫情死亡率
- OPC软件kepserver连接数据库MySQL教程
- 苹果电脑怎么截图 Mac/Win7双系统截图方法