接口的幂等性的N种考虑,你知道吗?
Java后端技术
共 2949字,需浏览 6分钟
· 2020-12-10
往期热门文章:
3、Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)
目录
目录 前言 正文 1 接口幂等性 1.1 案例 2 解决方案 2.1 token机制 2.2 去重表 2.3 redis 的 SETNX键值 2.4 状态机幂 2.5 乐观锁(更新操作) 2.6 悲观锁(更新操作) 结语
前言
正文
1 接口幂等性
1.1 案例
2 解决方案
2.1 token机制
首先客户端先请求服务端,服务端生成token,每次请求生成的都是一个新的token(这个token一定要设置超时时间),将token存入redis当中,然后将token返回给客户端。 客户端携带刚刚返回的token请求服务端做业务请求。 服务端收到请求,做判断。 如果token在redis中,则直接删除该token,然后继续做业务请求。 如果token不在redis中,代表已经执行过当前业务了,则不执行业务。
2.2 去重表
首先客户端先请求服务端,服务端先将这次的请求信息存入一张mysql的去重表中,这张表要根据这次请求的其中某个特殊字段建立唯一索引,或者主键索引。 判断是否插入成功 如果插入成功,则继续做后续业务请求。 如果插入失败,则代表已经执行过当前请求。
1.mysql容错性,也就是mysql本身如果不是高可用的那么业务可能会受到影响: 2.既然是唯一索引,自然在写表的时候就没有办法用到changbuffer,每次都要从磁盘查出来判断再写入,对于一个高并发的接口来说,这些都是需要考虑的因素。
2.3 redis 的 SETNX键值
首先客户端先请求服务端,服务端将能代表这次请求业务的唯一字段以 SETNX 的方式存入redis,并设置超时时间,超时时间可以根据业务权衡。 判断是否插入成功 如果插入成功,则继续做后续业务请求。 如果插入失败,则代表已经执行过当前请求。
2.4 状态机幂
2.5 乐观锁(更新操作)
首先客户端先请求服务端,先查询出当前的version版本。 select version from .. where .. 根据version版本来做sql操作 UPDATE .. SET ... version=(version+1) WHERE .. AND version=version;
2.6 悲观锁(更新操作)
START TRANSACTION; # 开启事务
SELETE * FROM TABLE WHERE .. FOR UPDATE;
UPDATE TABLE SET ... WHERE ..;
COMMIT; # 提交事务
结语
往期热门文章:
1、《历史文章分类导读列表!精选优秀博文都在这里了!》
2、你以为JDK8之后用HashMap就没事了?死循环问题依然存在! 3、14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽 4、交公粮了:十一在家我都逛了哪些技术网站? 5、高并发和海量数据下的 9 个 Redis 经典案例剖析! 6、Docker 禁止被列入美国“实体名单”的国家、企业、个人使用
7、日志框架到底是Logback 还是 Log4j2? 8、IDEA 2020.2 重磅发布,动画级新功能预览! 9、数据库链接池终于搞对了,这次直接从100ms优化到3ms! 10、互联网公司忽悠员工的黑话,套路太深了。。。
评论
面试官:你懂 CDN 吗?
图解学习网站:https://xiaolincoding.com五一假期期间,图解网站的图片突然全部挂了,可以说是P0事故了,很多读者纷纷私信跟我说,图片挂了, 耽误他学习了!我还是很惊讶,节假日还挺多人在学习的呢,针不戳!这次的事故原因也比较简单,CDN 域名的证书过期了,因为图片是放在了 CDN
小林coding
2
如何看待稚晖君的时间管理水平?
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达计算机视觉life整理原文链接:https://www.zhihu.com/question/491456524/answer/2183081310稚晖君究竟是如何安排业余时间去做这么多高水平的项目?而且每个项目的用时也很少,普通
小白学视觉
2
如何画出漂亮的神经网络图?神经网络可视化工具集锦搜集
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达1. draw_convnet一个用于画卷积神经网络的Python脚本https://github.com/gwding/draw_convnet2. NNSVGhttp://alexlenail.me/NN-SVG/LeNet.
小白学视觉
0
三个优秀的PyTorch实现语义分割框架
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达转自 | 机器学习AI算法工程使用的VOC数据集链接开放在文章中,预训练模型已上传Github,环境我使用Colab pro,大家下载模型做预测即可。代码链接: https://github.com/lixiang007
小白学视觉
0
神经网络之CNN与RNN的关系
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达1、CNN介绍CNN是一种利用卷积计算的神经网络。它可以通过卷积计算将原像素很大的图片保留主要特征变成很小的像素图片。本文以李宏毅老师ppt内容展开具体介绍。1.1 Why CNN for Image①为什么引入CNN ?图片示意
小白学视觉
0
如何确定神经网络的层数和隐藏层神经元数量?
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达公众号:尤而小屋作者:呦呦鹿鸣编辑:Peter大家好,我是Peter~关于神经网络中隐藏层的层数和神经元个数充满了疑惑。刚好看到一篇文章很好地答疑了,分享给大家~https://zhuanlan.zhihu.com/p/10041
小白学视觉
0
“海优最初弄出来可并不是为了给大佬弟子开后门的, 学术界现在几乎不存在任何套利空间,不要相信有什么办法可以投机取巧”
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达知乎问题:为什么部分同学倾向土博+国外博后而不是直接国外读博?感觉身边土博越来越多,基本都是土博➕海博后,申国外phd的明显减少(相比较疫情之前几年)知乎Tianteman: 这个问题下,可以看得出一部分国内硕博信息检索能力差的离
小白学视觉
0
真高!比亚迪员工爆料比亚迪在越南的薪资水平:基本工资480万,全勤奖35万,交通补助20万,餐补110万,每周6天,每天10小时
上一篇:某大公司为逼迫员工离职,竟然把他的工位安排到厕所旁,没想到他直接开始记录领导的如厕时间,还发到公司大群...对此,你怎么看?--完--PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。全文完,感谢你的耐心阅读。如果你还想看到我的文章,请一定给本
开发者全社区
0