结合Redis解决接口幂等性问题

结合Redis解决接口幂等性问题

  • 引言
  • 正文
  • 收获

引言

该问题产生背景是根据需求描述,要求对已发布的课程能进行编辑修改,并且要求能进行回滚。

幂等性问题描述:对同一个接口并发请求产生的结果是不变的。
Get 请求以及 Delete 请求天然保证幂等性。在本例中主要解决 Post 请求更新产生的幂等性问题。

正文

点击页面编辑课程按钮会发送一个携带修改课程 id 的 Post 请求。请求到达后端,首先进行非空校验,然后拼接前缀形成 Redis 的 Key,如果查询不为空则表明其他请求正在修改该课程,直接返回错误。如果为空,则可以进行修改,将该课程 id 存入 Redis,然后判断是否有正在编辑的课程副本,如果存在已经生成的副本,则直接返回该副本 id ,在这个基础上继续修改。如果不存在,则生成一份原课程的副本,将副本id返回给前端。

收获

实践检验了使用 Redis 解决幂等性问题是可行的。并且对比之前更新学习时开发项目,在企业中开发要考虑的更全面。之前未考虑到首先在副本上修改,没有提供回滚功能。而在企业中,没有直接修改原数据,而是修改复制一份的副本上,在最后确认修改完毕后再将原数据标记为删除状态,修改后数据标记为发布状态。

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

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

相关文章

Linux编辑器——vim的使用

目录 vim的基本概念 命令模式 底行模式 插入模式 注释和取消注释 普通用户进行sudo提权 vim配置问题 vim的基本概念 一般使用的vim有三种模式: 命令模式 底行模式和插入模式,可以进行转换; vim filename 打开vim,进入的…

【代码随想录|贪心算法 455. 分发饼干 376. 摆动序列 53. 最大子数组和】

代码随想录|贪心算法 455. 分发饼干 一、455. 分发饼干1.代码2.问题 二、376. 摆动序列1.代码 三、53. 最大子数组和1.代码 总结 python 一、455. 分发饼干 455. 分发饼干 1.代码 代码如下(示例): class Solution:def findContentChildr…

ffmpeg ffplay.c 源码分析

1 ffplay.c的意义 ffplay.c是FFmpeg源码⾃带的播放器,调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。 例如哔哩哔哩著名开源项⽬ijkplayer也是基于ffplay.c进⾏⼆次开发。 ffplay实现了播放器的主体功能,掌握其原理对于我们独⽴开发播放器⾮常有帮助…

junit mockito service

service类单元测试可以有两种方式 1、使用Autowired启用上下文的Bean走业务逻辑,适用于debug调试 2、使用InjectMocks不启用上下文依懒的Bean采用打桩的形式 打桩注意:service通常业务逻辑复杂,Bean的依懒层次可能很深,初用者常…

npm install时报错 reason: certificate has expired

在VS code中导入新项目,执行npm install时报错: npm warn old lockfile Could not fetch metadata for antv/g3.4.10 FetchError: request to https://registry.npm.taobao.org/antv%2fg failed, reason: certificate has expirednpm warn old lockfile …

[C/C++入门][for]25、药房管理(循环经典练习)

假设对于任意一种药品,每天开始工作时的库存总量已知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希…

UI设计中的响应式布局策略:让您的界面在各种设备上都表现出色

UI界面设计它是人与机器之间交互的媒介,也是客户体验的媒介(UX)一个组成部分。操作界面由两个主要部分组成:视觉设计(即传达产品的外观和感觉)和交互设计(即元素功能和逻辑组织)。用…

【Unity C#优化】业务逻辑代码方面的优化

代码方面的优化,主要是以降低内存的开辟和清理,提高CPU缓存命中率,利用多线程,为核心所进行的。 1.List与Dictionary的优化 List和Dictionary核心都是数组,Insert插入和Remove删除都要对数组进行复制和拷贝移动。并且…

kubernetes Dashboard搭建 (六)

DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。其实,为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard) 用户可以使用Dashboard部署容器化的应用,还可以监…

<数据集>木材缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:4000张 标注数量(xml文件个数):4000 标注数量(txt文件个数):4000 标注类别数:8 标注类别名称:[Quartzity,Live_Knot,Marrow,resin,Dead_Knot,knot_with_crack,Knot_m…

Prometheus 监控 Java 应用 JMX Exporter

操作场景 Prometheus 社区开发了 JMX Exporter 用于导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据。当您的 Java 业务容器化至 Kubernetes 后,可通过本文了解如何使用 Prometheus 与 JMX Exporter 来监控 Java 应用。 JMX Exporter 简介 Ja…

如何在 Puppeteer 中运行无头浏览器?

什么是无头浏览器? 我们都知道,用户界面(UI)是任何软件中最重要的部分。因此,“无头浏览器”的“无头”部分意味着它们确实缺少一个关键元素,即图形用户界面(GUI)。 这意味着浏览器…

探索.NET内存之海:垃圾回收的艺术与实践

简述 在.NET的广阔天地中,内存管理如同航海中的罗盘,指引着程序的稳健运行和性能的极致优化。作为软件工程师,我们时常在代码的海洋中航行,而内存管理则是确保航程顺畅的关键。本文将带您深入.NET的内存管理世界,一探垃…

webrtc QOS方法十三(视频渲染平滑)

一、背景介绍 视频渲染时间的确定需要考虑三方面的因素:网络抖动、网络延时、音视频同步 网络抖动:视频帧在网络上传输,会受到网络抖动的影响,不能收到立刻播放,需要进行适当的平滑 网络延时:一些报文在…

mysql8和mysql5版本在使用mybatis框架时的注意事项

mysql8和mysql5版本在使用mybatis框架时有些注意事项,两者的区别在于两处地方的设置。有一处未设置好,就会出现以下错误:java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Can…

基于深度学习的车距检测系统

1. 引言 详细内容: 车距检测在自动驾驶和驾驶辅助系统中具有重要意义,可以帮助避免车辆碰撞事故,提升驾驶安全性。YOLO(You Only Look Once)系列模型在实时目标检测中表现优异,可以用于车距检测任务。本文…

docker 安装并测试(Ubuntu下)

1. 确认安装环境(操作系统版本和 CPU 架构) 2. 如果有旧版本的 docker 需要进行卸载 使用 docker 命令检查是否已经安装了 docker 如果 docker 已经安装,使用以下命令卸载: apt-get purge docker-ce docker-ce-cli containerd…

@RequestBody接收到的参数中如何限制List的长度?

在Spring MVC中,你可以使用Valid注解和自定义的验证注解来限制List的长度,防止DOS攻击。具体步骤如下: 创建自定义注解:首先,创建一个自定义注解来验证List的长度。 import javax.validation.Constraint; import jav…

力扣3202:找出有效子序列的最大长度||

class Solution { public:int maximumLength(vector<int>& nums, int k) {int res0;for(int m0;m<k;m){//假设子序列两数%k之后的结果为m 相当于枚举vector<int> v(k,0);for(auto num:nums){v[num%k]v[(m-num%kk)%k]1; //知道m之后可以知道需要的子序列当前…

maven内网依赖包编译报错问题的一种解决方法

背景 外网开发时可以连接互联网&#xff0c;所以编译没有什么问题&#xff0c;但是将数据库、代码、maven仓库全部拷贝到内网&#xff0c;搭建内网环境之后&#xff0c;编译失败。 此依赖包的依赖层级图 maven镜像库配置使用拷贝到内网的本地库&#xff0c;配置如下&#xff…