幂等性及解决方案

news2024/11/25 8:16:20

什么是幂等性

幂等性简单的说就是相同条件下,一次请求和多次重复的请求,接口的执行结果是相同的。

什么情况下会出现幂等性问题呢?

  • 前端重复提交表单:如用户在提交表单的时候,由于网络波动没有及时给用户做出提交成功响应,导致用户认为没有提交成功,一直点击提交按钮,此时就会发生表单重复提交。
  • 接口超时重试:很多远程接口调用为了防止由于网络抖动导致的请求失败,都会引入重试机制,如feign的重试机制,导致一个请求发出多次。
  • 消息重复消费:在使用消息中间件时,一个消息可能会被重复发送,此时就会发生重复消费。

幂等性解决方案

方案一:数据库主键唯一性约束

利用数据库主键唯一性约束的特性,在插入数据的时候,如果主键已经存在,就会插入失败,从而保证幂等性。

方案二:数据库乐观锁实现幂等性

一般适合更新操作,需要我们在数据库中多添加一个版本字段,在每次修改数据的时候,先进行版本号的比对,版本号比对成功才会进行更新操作,同时版本号也需进行修改。(相当于每修改一次数据,就升级一次版本)

update table set price = price + 100,version=version+1 where id = 1 ADN version = 1

方案三:上游服务传递全局唯一id实现幂等性

在调用远程接口时,传递一个唯一id,远程服务拿着这个全局id自己的认证ID作为redis的键,去redis中查询,进行判断:

  • 存在,说明之前处理过,直接返回重复请求的错误信息;
  • 不存在,将用全局id和自己的认证ID作为redis的键,保存在redis中,然后处理业务;

方案四:token机制

  1. 常规token机制

以下订单为例:

  1. 用户在提交订单前先向服务器申请一个token(比如在生成订单信息返回一个token),服务器将这个token保存在redis中。
  2. 用户提交订单时,携带该token过去
  3. 服务器判断token在redis中是否存在,存在表明是第一次请求,然后删除token,继续执行业务
  4. 如果不存在,则表明是重复操作,直接返回重复操作提示给客户端,这样就保证了业务代码不会被重复执行。
  1. 非常规token机制

流程:

  1. 同样用户需要先到服务器中申请一个token,不同的是,服务器没有将token存入redis中
  2. 用户请求的时候携带上token,服务器使用redis的set NX,PX(NX代表只有key不存在时才设置成功,PX代表在过期时间后会自动释放)尝试将token保存到redis中
  3. 如果保存成功的话,说明是第一次请求,执行业务代码。如果保存失败,说明是重复请求,向用户提示重复请求。

幂等性总结:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/718876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI的新语言模型升级是否会改变人工智能领域的格局?

近年来,人工智能领域取得了巨大的进展,其中语言模型的发展尤为引人注目。而在这个领域的重要参与者之一,OpenAI近期宣布了其大型语言模型API的重大升级,引发了业界的广泛关注。随着GPT-4和gpt-3.5-turbo等新版本的推出&#xff0c…

开源数字名片生成器EnBizCard

什么是 EnBizCard ? EnBizCard 可帮助您创建美观、响应灵敏的基于 HTML 的数字名片,并将其托管在您的网站上。 无需注册100% 免费和开源没有用户跟踪和数据收集离线工作 如果不想自己搭建,可以去试用官方的在线体验站点,地址&…

SpringBoot 项目模板:摆脱步步搭建

前言 在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为“第0个迭代”要做的事情。但是,当项目运行了一段时间之后再来反观,我总会发现一些不足…

第六节 计算器 趣味问答

使用tkinter 制作计算器 1 Radiobutton组件 单选按钮. 需要使用的组件名称Radiobutton 如何使用单选按钮 、 单选按钮属于互斥的,只能选用一个。 Radiobutton按钮选项参数的说明: text 显示文字。variable : 绑定变量。value :指定每个按钮代表什么值。 2 计算…

Vulkan Tutorial 10 重采样

目录 30 多重采样 获得可用的样本数 设置一个渲染目标 添加新的附件 30 多重采样 我们的程序现在可以为纹理加载多层次的细节,这修复了在渲染离观众较远的物体时出现的假象。现在的图像平滑了许多,然而仔细观察,你会发现在绘制的几何图形…

ESP8266 RTOS SDK开发 windows开发

https://blog.csdn.net/qq_36347513/article/details/105066905 文件下载路径 https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html 下载编译环境MSYS2 下载完成后解压到根目录 双击mingw32.exe打开,ls看一下是在什么…

青岛大学_王卓老师【数据结构与算法】Week04_04_双向链表的插入_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

微信小程序实现抖音视频效果

当我们进行开发的时候可能会遇到需要实现抖音视频效果的需求,并且网上该效果的开源代码少,找到的开源代码代码量大,很难进行二次开发 对此我将自己的代码进行简化,仅留下可动性高的代码模块 以上是实现效果与此处demo的模板 wx…

c++的输入与输出

c中的各种流 文件输入流ifstream 读数据 #include <iostream> #include <iostream> #include <fstream> int main(int const argc, char const *const *argv) {std::ifstream is{"hello.txt"};if (is.good()){std::string s;while (is >> s)…

如何给没有坐标的栅格数据添加坐标信息

在进行NETCDF和HDF格式转换时&#xff0c;经常会出现数据转出来了。但没有任何坐标信息的情况。这如下图转出来的数据就完全不带坐标信息&#xff0c;就好像一副图片一样。但数据的值和像素信息保存完好。如下边一个NC数转出的TIFF栅格数据&#xff1a; 这是我用GIS数据转换器-…

【Matlab】神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值

目前关于神经网络遗传算法函数极值寻优——非线性函数求极值的博客资源已经不少了&#xff0c;我看了下来源&#xff0c;最初的应该是来自于Matlab中文论坛&#xff0c;论坛出版的《MATLAB神经网络30个案例分析》第4章就是《神经网络遗传算法函数极值寻优——非线性函数极值寻优…

Ubuntu 添加新用户并配额

背景&#xff1a;在配置工作站或者服务器时&#xff0c;需要为多个用户提供服务&#xff0c;但是需要各个用户之间操作互不干扰&#xff0c;自己所安装的各种环境不会对其他人或root账号下的主系统环境有影响&#xff0c;并且各用户每个用户需要分配额定的内存空间。 安装 quo…

紫光展锐联合罗德与施瓦茨在MWC上海共同展示RedCap测试方案

在6月28日-30日举办的2023上海世界移动大会上&#xff08;MWC上海&#xff09;&#xff0c;紫光展锐联合罗德与施瓦茨共同演示RedCap射频与吞吐量测试&#xff0c;确保RedCap终端功能和性能达到预期。在本次联合测试中&#xff0c;RedCap下行吞吐量可达220Mbps&#xff0c;上行…

大模型加速学科升级,飞桨赋能北邮“X+大模型”特色小学期

在人工智能时代&#xff0c;设计师与产品经理比以往更加需要关注一个事实&#xff1a;那就是如何利用人工智能和数据分析技术&#xff0c;打造让用户心动的信息交互产品和用户体验&#xff0c;释放人-机协同共创的巨大潜能&#xff0c;是决定设计产能和竞争力的关键。 在产业的…

港科夜闻|叶玉如校长出席香港创科 砥砺前行主题论坛

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大校长叶玉如教授出席「香港创科 砥砺前行」主题论坛。该论坛为中华人民共和国香港特别行政区成立26周年庆祝活动之一&#xff0c;叶玉如校长在论坛上分享了她对香港创新科技及研究发展未来的见解。论坛亦包括国际…

Cmder最新版--打开慢 删除字符残留问题

标题Cmder最新版–打开慢 删除字符残留问题 1 打开慢 打开后左下角跳动显示findstr.exe cmd.exe git.exe&#xff0c;很久后才能正常输入。 解决方案&#xff1a; 关闭更新检查及运行dll注入&#xff08;如下二图&#xff09; 2 删除后有字符残留 像这样很烦 解决方案有…

wireshark学习

抓包原理 哪种网络情况可以抓到包&#xff1f;&#xff08;1&#xff09;本机环境&#xff08;2&#xff09;集线器环境&#xff08;3&#xff09;交换机环境 交换机环境目前较为常用&#xff0c;这也分为三种情况&#xff08;1&#xff09;端口镜像&#xff08;2&#xff09…

vue项目使用自定义域名开启本地服务(ip地址和域名映射)

前言 有的时候&#xff0c;我们直接用script请求需要在同一个顶级&#xff08;一级&#xff09;域名下才可以拿到数据。 本地服务在开启时一般都是localhost&#xff0c;或者带ip。如果想要自定义域名访问本地服务&#xff0c;需要做以下配置。 ip地址和域名映射 在域名请求…

六轴机械臂搬运仿真(机器人工具箱)

1、建立机械臂模型 工作台、货物 clear close all clc L(1)Link(d, 0.33, a,0 , alpha, pi/2,offset,pi); L(2)Link(d, 0, a, 0.26, alpha,0,offset,pi/2); L(3)Link(d, 0, a, 0.02, alpha,pi/2,offset,0); L(4)Link(d, -0.29, a, 0, alpha,pi/2,offset,0); L(5)Link(d, 0, a,…

问诊住院医疗业务数仓建模实操案例

一、数仓建模实超案例 &#xff08;一&#xff09;前言 医疗业务系统比较复杂&#xff0c;有HIS&#xff1a;医院信息管理系统&#xff08; Hospital Information System&#xff09;、CIS&#xff1a;临床信息系统&#xff08;Clinical Information System&#xff09;、LIS&…