【重复处理】CRUD接口幂等性处理

保证幂等性的核心思想:通过唯一的业务单号保证幂等

  1. 非并发情况下,查询业务单号有没有操作过,没有则执行操作
  2. 针对第一次执行业务时间,有大量并发情况下,整个操作过程加锁,通过分布式锁来加锁
  3. Select操作:不会对业务数据有影响,天然幂等
  4. Delete操作:第一次已经删除,第二次删除也不会有影响
    • 根据唯一的业务号删除,第一次删除时间,已将数据删除,第二次再次执行时间,由于找不到相应嘉璐,所以delete删除的结果式0,对业务数据没有影响,可在删除前进行数据库查询
    • 删除操作没有唯一业务号,则要看具体的业务需求,如删除未审核的数据,此时多次删除,可能会有新的未审核的数据,此时如果依然需要保证幂等性,就需要使用token机制来实现
  5. Update操作:更新操作传入数据版本号,通过乐观锁实现幂等性
    • 更新操作如果每次都是相同的值,那么不需要保证幂等性,因为值一样
    • 更新的字段的值操作是变化的,那么就会有影响,此时就是通过传入版本号来实现
    update set version=version+1, xxx=${xxx} where id = xxx and version = ${version}
    
    上述语句在mysql执行时间,是有行锁的,是串行的,及时有多次提交,那么版本号不一致的情况下,也是无法完成update,即实现了幂等
  6. Insert操作:此时没有唯一业务号的,使用Token保证幂等
    • 有唯一业务号的操作,例如:秒杀场景下,商品ID+用户ID必须是唯一的通过分布式锁,保证并发情况下只有一个请求能够生成记录,然后通过数据库的唯一索引控制数据商品ID+用户ID只能有一条记录,保证接口幂等,业务执行完后,不进行分布式锁释放,让其过期自动释放,重拾请求在锁失效前,获得不到锁,也就失败了
    • 没有业务号的操作,如注册、点击多次等,使用Token机制,保证幂等性,在进入到注册页时,后台统一生成Token,返回前台的隐藏域中。用户提交时间,将Token一同传入后台使用Token作为分布式锁的key来获取分布式锁,完成insert操作,执行成功后,不释放锁,等待过期自动释放,拿不到分布式锁的则无法进行操作

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

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

相关文章

时序预测 | MATLAB实现基于CNN-BiGRU卷积双向门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-BiGRU卷积双向门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-BiGRU卷积双向门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基于…

Dubbo基础学习

目录 第一章、概念介绍1.1)什么是RPC框架1.2)什么是分布式系统1.3)Dubbo概述1.3)Dubbo基本架构 第二章、服务提供者(直连)2.1)目录结构和依赖2.2)model层2.3)service层2.4)resources…

【eNSP】交换机(vlan和vlan间通信)

【eNSP】交换机(vlan和vlan间通信) 原理术语过程 实验根据图片连接模块配置设备名称和IP地址配置交换机交换机链路指定sw1配置sw2配置 设置网关交换机互联实验设置查看设置结果 ospf配置 原理 HUB集线器:它的作用可以简单的理解为将一些机器…

【算法系列篇】双指针

文章目录 前言什么是双指针算法1.移动零1.1 题目要求1.2 做题思路1.3 Java代码实现 2.复写零2.1 题目要求2.2 做题思路2.3 Java代码实现 3.快乐数3.1 题目要求3.2 做题思路3.3 Java代码实现 4.盛最多水的容器4.1 题目要求4.2 做题思路4.3 Java代码实现 5.有效三角形的个数5.1 题…

k8s 自身原理 4

前面咱们分享了 mater 和 worker 节点里面都有哪些组件,他们又是各自主要负责的工作是什么,现在我们心里应该都有数了吧 master 节点: etcd 存储资源配置,ApiServer 提供 RESTful Api 用于交互,scheduler 用于调度 p…

VS2019 + Qt : setToolTip的提示内容出现乱码

VS2019 Qt : setToolTip的提示内容出现乱码 在使用setToolTip()时, setToolTip(QString("asd你好!");标签提示只有英文是对的,中文是乱码! 应该是编码出了问题。默认情况下,Qt使用的是UTF-8编码&#xf…

踩坑经验:JavaScript 中的 for...of 和 for...in 循环

在 JavaScript 编程中,for...of 和 for...in 是常用的循环语法,但它们在使用时可能会引发一些意想不到的问题。本文将分享我在使用这两种循环时所遇到的坑和经验。 两者的区别: 适用对象类型: for…of:主要用于遍历可…

数据结构-带头双向循环链表的实现

前言 带头双向循环链表是一种重要的数据结构,它的结构是很完美的,它弥补了单链表的许多不足,让我们一起来了解一下它是如何实现的吧! 1.节点的结构 它的节点中存储着数据和两个指针,一个指针_prev用来记录前一个节点…

Git详解及使用

Git简介 Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具。 大概是大二的时候开始接触和使用Gi…

云计算——ACA学习 云计算核心技术

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 写在前面 本系列将会持续更新云计算阿里云ACA的学习,了解云计算及网络安全相关…

DeepSpeed加速大模型训练

DeepSpeed是微软推出的一个框架,可以对Pytorch的模型进行包装,提供了加快模型的训练速度,降低对GPU显存的占用,以及方便进行分布式训练等等高级特性。在这里我也对DeepSpeed进行了测试,看看是否能提高我的transformer模…

Maven 插件 maven-antrun-plugin 执行 ant 脚本

Ant 相信大家都不陌生,你可以把它理解为使用 xml 格式描述的一系列命令处理工具。它是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make、有些类似于基于shell命令编写的sh脚本文件。Ant 用 Java 的类来扩展。&a…

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测基本介绍模型特点程序设计参考资料 基本介绍 本次运行测试环境MATLAB2021b,MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测。代码说明&#xff1a…

Java mail邮件开发 OA办公系统

目录 1 Java mail邮件开发 OA办公系统 1.1 //用户登录 1.2 //用户注册 1.3 //根据邮箱账号查询用户ID Java mail邮件开发 OA办公系统package com.email.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement;<

POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

开头还是介绍一下群&#xff0c;如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &…

Oracle执行计划

Oracle执行计划 1. 什么是执行计划Oracle explain使用3. Explain执行顺序 1. 什么是执行计划 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作&#xff1b;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定…

蔚来李斌卖手机:安卓系统,苹果售价,一年一发

‍作者 | Amy 编辑 | 德新 车圈大佬的玩法真让人寻不着套路&#xff01; 苹果的库克和小米的雷布斯&#xff0c;甚至是FF贾老板准备许久&#xff0c;都想分一块新能源车的蛋糕&#xff0c;蔚来李斌却反手进军手机界&#xff0c;从宣布造手机到手机入网仅仅隔了一年。 近期…

说几个常见的语法糖

目录 面试回答 知识扩展 如何解语法糖&#xff1f; 糖块一、swith 支持 String 与枚举 糖块二、泛型 糖块三、自动装箱与拆箱 糖块四、枚举 糖块五、条件编译 糖块六、断言 糖块七、数值字面量 糖块八、for-each 糖块九、try-with-resource 可能遇到的坑 泛型 自…

Beats:安装及配置 Metricbeat (一)- 8.x

在我之前的文章&#xff1a; Beats&#xff1a;Beats 入门教程 &#xff08;一&#xff09;Beats&#xff1a;Beats 入门教程 &#xff08;二&#xff09; 我详细描述了如何在 Elastic Stack 7.x 安装及配置 Beats。在那里的安装&#xff0c;它通常不带有安全及 Elasticsearc…

MapReduce介绍

目录 ​一、什么是MapReduce 二、MapReduce 的设计思想 2.1 分而治之 2.2 构建抽象模型&#xff1a;Map和Reduce 2.3 隐藏系统层细节 三、MapReduce 的框架原理 3.1 MRv1工作原理 3.1.1 MRv1架构工作原理图 3.1.1.1 流程说明 3.1.1.1.1 作业的提交 3.1.1.1.2 作业的初始化 3…