Redis配合唯一序列号实现接口幂等性方案

1.原理

可以在客户端每次请求服务端的时候,客户端请求中携带一个短时间内唯一不重复的序列号来确保其唯一性,这个序列号常见的几种形式有:基于时间戳、用户ID和随机数的组合;基于请求的来源与客户端生成的唯一序列号组合
在这里插入图片描述

2.方案

客户端生成唯一序列号后请求服务端,服务端拿到唯一序列号后组装一个Redis的key,利用setnx命令添加数据,然后根据Redis返回的结果做不同的处理
1)Redis返回的结果是1,表示当前的唯一序列号添加到Redis中成功,那么业务系统可以处理当前的业务逻辑。
在这里插入图片描述
2)Redis返回的结果是0,表示当前的唯一序列号已经在Redis中,此时业务系统认为这个请求已经处理过,就不再处理这个请求,直接给予客户端异常的提示。
在这里插入图片描述
3)唯一序列号添加到Redis中的时候要设置过期时间,这样做的目的是保证在这个时间范围内,如果携带相同唯一序列号的请求调用接口时可以做拦截处理;如果不设置过期时间,可能会致使Redis的内存被打满进而导致Redis宕机。通过这种方式,即使客户端多次发送相同的请求,服务器也只会处理一次,从而保证了接口的幂等性。
在这里插入图片描述

3,结论

方案一: 客户端生成唯一序列号后,服务端根据这个唯一序列号添加到Redis中,如果添加成功则可以执行业务逻辑,如果添加失败则向客户端响应请求执行异常。

方案二: 客户端传递唯一序列号,并且需要使用Redis添加过期时间存储唯一序列号
在这里插入图片描述

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

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

相关文章

代码安全规范1.1

命令注入是指应用程序执行命令的字符串或字符串的一部分来源于不可信赖的数据源,程序没有对这 些不可信赖的数据进行验证、过滤,导致程序执行恶意命令的一种攻击方式。 例 1 :以下代码通过 Runtime.exec() 方法调用 Windows 的 dir 命…

Jenkins实现自动化部署Springboot项目到Docker容器(Jenkinsfile)

Jenkins实现自动化部署Springboot项目到Docker容器 引言:为什么需要自动化部署? 在软件开发中,频繁的手动部署既耗时又容易出错。通过 Docker + Jenkins + Git 的组合,您可以实现: ✅ 一键部署:代码推送后自动构建和部署🐳 环境一致性:Docker 确保开发、测试、生产环…

第二届智慧教育与计算机技术国际学术会议(IECT 2025)

在数字化浪潮中,智慧教育与计算机技术的深度融合正重构教育生态。智能教学系统打破传统课堂的单向灌输模式,通过机器学习分析学习数据,为学生生成个性化学习路径,推动被动接受向主动探索转型。这对教育体系提出核心诉求&#xff1…

驱控边界在哪里?知名舵机品牌伟创动力CNTE2025展带来答案

2025年6月12日,北京国防科技装备展将再度启幕。作为微型驱控领域的代表性厂商,伟创动力(Kpower)将带来覆盖舵机、减速齿轮箱、无刷电机及一体化驱控模组在内的全系解决方案,舵机产品回应一个至关重要的技术命题——“国…

Day46 Python打卡训练营

知识点回顾: 1. 不同CNN层的特征图:不同通道的特征图 2. 什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。 3. 通道注意力:模型的定义和插入的位置 4. 通道注意力后…

专业级PDF转CAD解决方案

PDF 文件因其出色的便携性和稳定性,已成为许多用户的首选格式。但在涉及图像编辑或精细调整时,CAD 文件显然更具优势。 这款 CAD 图纸转换工具,界面清爽、操作直观,是处理图纸文件的理想助手。 它不仅支持不同版本 CAD 文件之间…

PDF文件如何转换格式?简单教程来了

PDF 格式以其高兼容性和稳定性被广泛使用,但有时为了便于编辑或满足特定软件的要求,我们需要将其转换为其他格式,如 Word、Excel、图片等。那如何将PDF转换成其他格式文件呢?其实方法很简单,不清楚的小伙伴一起来看看吧…

三十四、面向对象底层逻辑-SpringMVC九大组件之FlashMapManager接口设计哲学

在构建符合 RESTful 原则或追求用户体验流畅性的 Web 应用时,“重定向后刷新”(PRG - Post/Redirect/Get)模式是避免表单重复提交、实现页面无刷新跳转的黄金法则。然而,重定向(REDIRECT:)的本质是客户端发…

android手势创建及识别保姆级教程

手势交互,简单来说,就是通过手指在屏幕上的滑动、点击、缩放等动作与设备沟通的方式,早已成为现代移动设备用户体验的核心支柱。想想看,无论是日常刷短视频时的上下滑动,还是地图导航时的双指缩放,甚至是游…

Python | Windows11通过离线方式安装pyserial

导言 因公司网络访问的限制,没办法使用pip install pyserial轻松地安装pyserial库。 打开网页:https://pypi.org/project/pyserial/#files 下载.whl cmd命令行 如下是命令行指令: pip install .\pyserial-3.5-py2.py3-none-any.whlpython …

【nano与Vim】常用命令

使用nano编辑器 保存文件 : 按下CtrlO组合键,然后按Enter键确认文件名。 退出编辑器 : 按下CtrlX组合键。 使用vi或vim编辑器 保存文件 : 按Esc键退出插入模式,然后输入:w并按Enter键保存文件。 退出编辑器 &#xf…

(Python网络爬虫);抓取B站404页面小漫画

目录 一. 分析网页 二. 准备工作 三. 实现爬虫 1. 抓取工作 2. 分析工作 3. 拼接主函数&运行结果 四. 完整代码清单 1.多线程版本spider.py: 2.异步版本async_spider.py: 经常逛B站的同志们可能知道,B站的404页面做得别具匠心&…

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…

ROS1: 使用rosbag的方式将点云topic保存为pcd文件

ROS1: 使用rosbag的方式将点云topic保存为pcd文件。 分为两步:步骤1:通过rosbag录制点云 ,步骤2:通过ros1将rosbag保存为点云pcd文件。 ------------------------ 步骤一:指令示例如下: # topic 名称&a…

MySQL 高级学习篇

一、连结(Join) 1.1 概念 联结(Join)操作用于将多个表中的列组合在一起,形成一个新的查询结果集。它允许我们从多个表中提取数据,并基于表之间的关系进行查询。 1.2 类型 1. 内联结(INNER J…

clickhouse 学习总结

在 ClickHouse 中,配置文件通常位于 /etc/clickhouse 目录下。这个目录包含了多个配置文件,用于控制 ClickHouse 的各种服务(如服务器、用户、远程服务等)的配置。 数据存储目录/var/lib/clickhouse 配置 文件目录 /etc/clickho…

理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析

前言 在JavaScript面试中,map和parseInt的组合常常被用作考察候选人对这两个方法理解深度的题目。让我们通过一个简单的例子来深入探讨其中的原理。 问题现象 [1, 2, 3].map(parseInt) // 输出结果是什么?很多人可能会预期输出[1, 2, 3],但…

字符串 金额转换

package heima.Test09;import java.util.Scanner;public class Money {public static void main(String[] args) {//1。键盘录入一个金额Scanner sc new Scanner(System.in);//请输入一个数据String result "";int money;while (true) {System.out.println("请…

静态相机中的 CCD和CMOS的区别

文章目录 CCD处理方式CMOS处理方式两者区别 首先根据 成像原理,CCD和CMOS的作用是一致的,都是为了将光子转化为数字图像,只是 转换的方式出现差异。 CCD处理方式 获取光子: 在电荷耦合器件(CCD)传感器中…

Pycharm的终端无法使用Anaconda命令行问题详细解决教程

很多初学者在Windows系统上安装了Anaconda后,在PyCharm终端中运行Conda命令时,会遇到以下错误: conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 请检查名称的拼写,如果包括路径,请确保…