常见的幂等性保障方案

数据幂等性是指相同的操作在不同时间执行多次所产生的结果是一样的,它是保证操作的可靠性和正确性的重要标准。

使用幂等性是必要的,因为同一操作经常会被重复执行。当多次执行相同的操作时,如果没有幂等性,会产生不可预料的结果。例如在数据库中插入一条记录时,如果没有使用幂等性,可能会导致多条相同的记录被插入。

以下是一些幂等性保障方案:

1、MySQL唯一索引或主键 INSERT IGNORE
示例:INSERT IGNORE INTO table (col1, col2) VALUES (val1, val2);
INSERT IGNORE语句会在插入数据时忽略重复值,如果已存在则返回0。不会抛出任何错误。
该方法能够保障数据库插入操作时的幂等性。

2、MySQL唯一索引或主键 ON DUPLICATE KEY
2.1 示例:INSERT INTO table (col1, col2) VALUES (val1, val2) ON DUPLICATE KEY UPDATE col1 = val1;
ON DUPLICATE KEY UPDATE语句。当插入重复数据时,会将原有的数据进行更新,更新的列由SET子句指定。

2.2 示例:CREATE TABLE table (id INT PRIMARY KEY, col1 VARCHAR(255)) ENGINE=InnoDB;
INSERT INTO table (id, col1) VALUES (1, ‘test’) ON DUPLICATE KEY UPDATE col1 = VALUES(col1);
VALUES子句获取插入的值,使得更新操作与插入操作一样。这种方式适用于所有数据库。

该方法能够保障数据库插入操作时的幂等性。但会将记录更新为最后一次请求的字段

3、MYSQL唯一索引 INSERT
插入表时如果使用了重复字段/主键将会报错。
该方法增加了一个唯一索引,增加了表更新时所需的时间,降低了表的整体写入效率。另外,报错后在服务中需要视情况catch住相应异常,需要在代码中增加catch操作。
该方法能够保障数据库插入操作时的幂等性。

4、幂等表
在实际的写入请求之前,先插入幂等表,幂等表插入成功则可以继续执行,若插入失败则表明已做过相应操作,执行失败时应回滚幂等表。幂等表通常包含主键、类型、业务主键、状态、创建时间等,供所有业务共同使用。
插入语句的实现参考方案1、3。
该方法能够保障同一事务操作的幂等性。

5、分布式锁(悲观锁)
依赖于中间件实现的幂等性保障,需要考虑降级。
该方法能够保障同一事务操作的幂等性。

6、版本控制(乐观锁)
更新sql使用状态机作为条件范围,如果不符合状态机则更新失败。
该方法能够保障更新操作的幂等性。

7、状态机
更新sql使用状态机作为条件范围,如果不符合状态机则更新失败。
该方法能够保障更新操作的幂等性。

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

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

相关文章

基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例(STM32L496为例)

基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例(STM32L496为例) 工程: Keil工程资源 参考资料: A121 datasheet 1.3 A121 HAL Software Integration User Guide A121 STM32CubeIDE User Guide 官方参考示例工程&a…

Android 10-13鼠标右键返回功能适配

Android 10-13鼠标右键返回功能适配 文章目录 Android 10-13鼠标右键返回功能适配一、前言二、鼠标右键适配修改1、Android 10 以及更低版本2、Android11 或者更高版本三、总结1、鼠标右键返回功能修改主要代码2、标右键返回修改代码系统源码搜索3、其他 一、前言 Android 原生…

MySQL安全性:用户认证、防范SQL注入和SSL/TLS配置详解

MySQL作为广泛使用的关系型数据库管理系统,安全性至关重要。在本篇技术博客中,我们将深入探讨MySQL的用户认证方式、防范SQL注入攻击的方法以及SSL/TLS加密的配置。 1. MySQL用户认证方式 MySQL支持多种用户认证方式,其中两种常见方式是cac…

Logstash同步MySQL数据到ES

简介 1.1 什么是Logstash? Logstash作为一个具备实时流水线功能的开源数据收集引擎,拥有强大的能力。它能够从不同来源收集数据,并将其动态地汇聚,进而根据我们定义的规范进行转换或者输出到我们定义的目标地址。 1.2 Logstash的…

水果音乐制作软件FL Studio21.2中文版新功能介绍

FL Studio21.2中文版,一般又称水果音乐制作软件。 FL Studio 21.2简称FL,全称FruityLoopsStudio,因此国人习惯叫它"水果"。它让你的计算机就像是全功能的录音室,大混音盘,非常先进的制作工具,让…

docker 安装kkFileView教程

kkFile 官方参考文档 https://kkfileview.keking.cn/zh-cn/docs/production.html拉取kkFileView 镜像 docker pull keking/kkfileview启动容器 docker run -it -d -p 8012:8012 keking/kkfileview --restart always进入首页 浏览器访问容器8012端口http://ip :8012即可看到…

MySQL数据库事务隔离级别与性能监控

MySQL作为一款广泛使用的关系型数据库管理系统,在保障数据一致性和性能的同时,提供了丰富的事务隔离级别和性能监控工具。本文将深入探讨MySQL的事务隔离级别以及如何查看MySQL的运行状态和性能统计信息。 1. 数据库事务的隔离级别 1.1 什么是事务隔离…

练习7-在Verilog中使用任务task

在Verilog中使用任务task 1,任务目的2,RTL代码,交换3,测试代码4,波形显示 1,任务目的 (1)掌握任务在verilog模块设计中的应用; (2)学会在电平敏感…

②【Hash】Redis常用数据类型:Hash [使用手册]

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Redis Hash ②Redis Hash 操作命令汇总1. hset…

U4_1:图论之DFS/BFS/TS/Scc

文章目录 一、图的基本概念二、广度优先搜索(BFS)记录伪代码时间复杂度流程应用 三、深度优先搜索(DFS)记录伪代码时间复杂度流程时间戳结构BFS和DFS比较 四、拓扑排序一些概念有向图作用拓扑排序 分析伪代码时间复杂度彩蛋 五、强…

使用 ClickHouse 做日志分析

原作:Monika Singh & Pradeep Chhetri 这是我们在 Monitorama 2022 上发表的演讲的改编稿。您可以在此处找到包含演讲者笔记的幻灯片和此处的视频。 当 Cloudflare 的请求抛出错误时,信息会记录在我们的 requests_error 管道中。错误日志用于帮助解…

【DevOps】Git 图文详解(六):Git 利器 - 分支

Git 利器 - 分支 1.分支 Branch2.分支指令 &#x1f525;3.分支的切换 checkout4.合并 merge & 冲突4.1 &#x1f538; 快速合并&#xff08;Fast forward&#xff09;4.2 &#x1f538; 普通合并4.3 处理冲突 <<<<<<< HEAD 5.变基 rebase 分支是从主…

linux rsyslog综合实战2

本次我们通过rsyslog服务将A节点服务器上的两个(E.g:多个日志也可以)日志(Path:/var/log/245-1.log、245-2.log)实时同步到B节点服务器目录下(Path:/opt/rsyslog/245) 1.rsyslog架构 2.环境信息 环境信息 HostnameIpAddressOS versionModuleNotersyslog1192.168.10.245CentOS…

2023 最新 PDF.js 在 Vue3 中的使用(长期更新)

因为自己写业务要定制各种 pdf 预览情况&#xff08;可能&#xff09;&#xff0c;所以采用了 pdf.js 而不是各种第三方封装库&#xff0c;主要还是为了更好的自由度。 一、PDF.js 介绍 官方地址 中文文档 PDF.js 是一个使用 HTML5 构建的便携式文档格式查看器。 pdf.js 是社区…

基于51单片机音乐盒LCD1602显示( proteus仿真+程序+原理图+设计报告+讲解视频)

基于51单片机音乐盒LCD1602显示( proteus仿真程序原理图设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0065 音乐盒 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真…

【Qt6】字符串std::string转成Qt6的字符串QString,并输出日志

【Qt6】字符串std::string转成Qt6的字符串QString&#xff0c;并输出日志&#xff1a; std::string m_name;QString qStrName QString::fromLocal8Bit(m_name);qDebug("name %s", qPrintable(dataSourceID)); 【注意】&#xff1a; 需要用QString::fromLocal8Bit()…

Polygon Miden VM架构总览

1. 计算类型 Programs程序有2种类型&#xff1a; 1&#xff09;Circuit电路&#xff1a;即&#xff0c;程序即电路。将程序转换为电路。2&#xff09;Virtual machine虚拟机&#xff1a;即&#xff0c;程序为电路的输入。【Miden VM属于此类型】 2. 何为ZK virtual machine…

探索 Material 3:全新设计系统和组件库的介绍

探索 Material 3&#xff1a;全新设计系统和组件库的介绍 一、Material 3 简介1.1 Material 3 的改进和更新1.2 Material 3 的优势特点 二、Material 3 主题使用2.1 使用 Material3 主题2.2 使用 Material3 主题颜色 三、Material 3 组件使用3.1 MaterialButton&#xff1a;支持…

15 Go的并发

概述 在上一节的内容中&#xff0c;我们介绍了Go的类型转换&#xff0c;包括&#xff1a;断言类型转换、显式类型转换、隐式类型转换、strconv包等。在本节中&#xff0c;我们将介绍Go的并发。Go语言以其强大的并发模型而闻名&#xff0c;其并发特性主要通过以下几个元素来实现…

微机原理_15

一、单项选择题&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案。 以下叙述正确的&#xff08;&#xff09; A.微机的字长可以是8、16、24、32位 B.微机的字长可以是8、16、32、64位 C.微…