幂等性及解决方案

什么是幂等性

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

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

  • 前端重复提交表单:如用户在提交表单的时候,由于网络波动没有及时给用户做出提交成功响应,导致用户认为没有提交成功,一直点击提交按钮,此时就会发生表单重复提交。
  • 接口超时重试:很多远程接口调用为了防止由于网络抖动导致的请求失败,都会引入重试机制,如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. 如果保存成功的话,说明是第一次请求,执行业务代码。如果保存失败,说明是重复请求,向用户提示重复请求。

幂等性总结:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

可信数据库大会,不见不散!

由中国信息通信研究院、中国通信标准化协会指导,中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)、InfoQ 极客传媒联合主办的 2023 可信数据库发展大会将于今日在北京国际会议中心隆重召开。 本届大会以“自主 创新 引领”为主题…

STM32微控制器:现状与竞争力的评估

STM32是意法半导体(STMicroelectronics)开发的一系列32位ARM Cortex-M微控制器。它们被广泛用于嵌入式系统开发,并在许多应用领域中得到了广泛应用,包括消费电子、工业自动化、汽车行业和物联网等。 尽管我无法提供最新的市场趋势…

Linux 内核源代码情景分析(一)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理 Linux 内核源代码情景分析(一) 文章目录 系列文章目录一、存储管理1、外部设备存储空间的地址映射(1&#xff…

机器学习14:稀疏性-Sparsity

现实世界中,问题的特征的数量往往是很大的,而其中起决定性作用的往往是很小的一部分,稀疏规则化算子的引入会学习去掉这些没有信息的特征,也就是把这些特征对应的权重置为 0。 1.稀疏性正则化:L₁ 正则化 稀疏向量通常…

SSM框架模板

SSM(Spring、SpringMVC、MyBatis) 首先对Spring框架和mybatis框架进行整合:(需要进行测试,是否获取到数据库的内容,才能进行下一步对Springmvc框架的整合) 目录结构: pom.xml文件的模板: 最开…

spring.aop 随笔4 如何借助jdk代理类实现aop

0. 下了有一个月的雨,这对鼻炎来说来吗?不好 其实这也算6月份的博客,之前一直疏于整理 本文仅关注jdk代理所实现的spring.aop下,两者的关系完整的aop源码走读请移步相关 spring.aop 的其他随笔 1. 反编译追踪源码 1.1 jdk代理类…

Echarts柱状图数据过多设置滚动条效果

未设置前: 可以看出数据全部挤压在一起了 设置后: 下面多出一个滚动条,并且鼠标可以拖动数据 dataZoom: [{show: true,height:8,bottom:0,startValue: 0, //起始值endValue: 5, //结束值showDetail: false,fillerColor: "rgba(1, 132, …

(5)深度学习学习笔记-多层感知机

文章目录 多层感知机和激活函数代码来源 多层感知机和激活函数 通过在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型。最简单的方法是将多个全连接层堆叠在一起。每一层都输出到上面的层,直到生成最后的输出&#xf…

springboot开启热部署

第一步引入spring-boot-devtools依赖 <!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><!--默认false改依赖是否可以传递&…

虚幻引擎(UE5)-大世界分区WorldPartition教程(三)

文章目录 前言LevelInstance的使用1.ALevelInstance2.选择Actor创建关卡3.运行时加载LevelInstance 总结 上一篇&#xff1a;虚幻引擎(UE5)-大世界分区WorldPartition教程(二) 前言 在制作大关卡时&#xff0c;可能会遇到这样一种情况&#xff0c;就是关卡中的某些Actor会重复…

Element-Plus select选择器-下拉组件错位bug(有高度滚动时)

1. bug重现 由于项目不便展示&#xff0c;因此在官网复现bug https://element-plus.org/zh-CN/component/select.html#基础用法 2. 调试 源码调试时发现下拉菜单是直接放在body 元素里&#xff0c;这时候希望它不要直接放在body里&#xff0c; 查阅文档看到这两个属性&#x…

量化研究丨全市场多空情绪

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 大家好&#xff0c;我是Le Chiffre 今天我们简单的介绍一个天风期货工具复现&#xff0c;如下图所示&#xff1a; 其实我只是关注了公众号&#xff0c;但是从来没有认真看过他们的研究。在5月底的时候&…

计算机网络速成

更好的阅读体验 \color{red}{\huge{更好的阅读体验}} 更好的阅读体验 因特网概述 网络、互联网和因特网 网络&#xff1a;将多个计算机或计算机网络通过通信线路连接起来&#xff0c;使得它们可以相互通信和交换信息的系统。由若干节点&#xff08;Node&#xff09;和连接这些…

课程20:API项目重构

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

神经网络初谈

文章目录 简介神经网络的发展历程神经网络的初生神经网络的第一次折戟神经网络的新生&#xff0c;Hinton携BP算法登上历史舞台命途多舛&#xff0c;神经网络的第二次寒冬神经网络的重生&#xff0c;黄袍加身&#xff0c;一步封神神经网络的未来&#xff0c;众说纷纭其他时间点 …

Cisco ISR 4000 Series IOS XE Release Dublin-17.11.1a ED

Cisco ISR 4000 Series IOS XE Release Dublin-17.11.1a ED 思科 4000 系列集成服务路由器 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-isr-4000/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 思科 4000 系列…

计算机视觉:分割一切AI大模型segment-anything

1 segment-anything介绍 Segment Anything Model (SAM)来源于Facebook公司Meta AI实验室。据Mata实验室介绍&#xff0c;SAM 已经学会了关于物体的一般概念&#xff0c;并且它可以为任何图像或视频中的任何物体生成 mask&#xff0c;甚至包括在训练过程中没有遇到过的物体和图…

面对“神奇的甲方”:如何应对匪夷所思的需求

在工作中&#xff0c;我们常常会遇到一些“神奇的甲方”&#xff0c;他们总是能给我们带来匪夷所思甚至无厘头的需求。本文将分享作者的经历&#xff0c;并提供一些建议&#xff0c;帮助读者应对这些“无理的需求”。 文章目录 方向一&#xff1a;分享那些你遇到的无理需求方向…

简单的手机记事本怎么把内容标记为完成状态?

很多人平时会在手机记事本上记录一些自己身边需要记住的事情&#xff0c;有的事情做完之后不想删除&#xff0c;又想要和未完成的内容区分开&#xff0c;那么这种情况下可以将它标记为已完成状态。简单的手机记事本怎么把内容标记为完成状态呢&#xff1f;以iPhone手机端敬业签…

【应用笔记】CW32 电容式触摸按键设计指南

前言 CW32 电容式触摸按键设计指南向客户提供一种利用 CW32 内部资源结合软件编程实现电容式触摸按键有效 触摸检测的方法。本指南的内容重点在于工作原理、软件检测过程以及调试指引。 利用芯源半导体的 CW32 系列小规模 MCU 的 IO、比较器、定时器、高速高精度内置 RC 时钟…