当前位置: 首页 > article >正文

解决 MySQL 表结构修改中锁定异常的全链路实战指南:从表结构设计到版本调优

引言

在 MySQL 中执行ALTER TABLE修改表结构(如新增字段、调整字段类型)时,锁定异常是最常见的阻碍。无论是 5.7 的 “锁等待超时”、8.0 的 “MDL 锁阻塞”,还是高并发下的 “长事务死锁”,本质都是表结构修改需要获取锁与业务读写持有锁的冲突。本文结合表结构设计优化(从源头减少锁需求)、分版本解决方案(5.7/8.0 + 及云数据库)及生产案例,系统解析锁定异常的触发机制与根治方法,并融入权威技术文档与工具指南,为读者提供可落地的技术方案。

一、锁定异常的三大类型与触发机制

修改表结构时,锁定异常的核心矛盾是 “表结构修改需要获取锁” 与 “业务读写需要持有锁” 的冲突,具体分为三类:

1.1 锁等待超时(Error 1205):长锁持有的致命伤

触发场景
ALTER TABLE需获取表锁时,若其他会话已持有锁(如未提交的UPDATE),且超过innodb_lock_wait_timeout(默认 50 秒)未释放,触发超时。

典型案例
某物流系统 MySQL 5.7 环境中,对 100 万行delivery表执行ALTER TABLE ADD COLUMN is_urgent TINYINT(1) NOT NULL;(未指定默认值),MySQL 隐式全表更新is_urgentNULL,锁持有时间长达 3 分钟,触发超时。

权威参考

  • MySQL 官方文档:InnoDB Locking

1.2 MDL 锁阻塞(Error 1105):长事务的隐形杀手

触发场景
存在未提交的长事务(如SELECT * FROM account FOR UPDATE),持有 MDL 读锁;ALTER TABLE需获取 MDL 写锁,导致阻塞。

典型案例
某金融系统 MySQL 5.7 环境中,DBA 执行ALTER TABLE account ADD COLUMN risk_score INT NULL;时,因存在 2 小时未提交的长事务,MDL 锁阻塞超 10 分钟,业务写入积压 2000 条。

权威参考

  • MySQL 官方文档:Metadata Locks

1.3 长事务死锁(Error 1213):高并发的锁冲突

触发场景
高并发下,ALTER TABLE与多个写操作(如UPDATE)同时请求表锁,导致死锁。

典型案例
某电商大促期间,MySQL 5.7 环境中执行ALTER TABLE product ADD COLUMN stock_alert TINYINT(1) NOT NULL DEFAULT 0;时,与 20 个UPDATE product SET stock=stock-1;语句冲突,死锁导致交易成功率下降 30%。

权威参考

  • MySQL 官方文档:Deadlock Detection

二、预防锁定异常的表结构设计:从源头减少锁需求

通过表结构设计优化,可显著降低ALTER TABLE时的锁需求与锁范围,从源头减少锁定异常发生。

2.1 字段精简与垂直拆分:减少元数据锁时间

设计逻辑
字段过多或包含大字段(如TEXT/BLOB)的表,修改时需扫描更多元数据,锁持有时间延长;查询时易触发全表扫描,增加行锁冲突。

优化方案

  • 字段精简:仅保留业务必需字段,非核心字段(如用户备注、日志详情)移至关联表。
  • 垂直拆分:将高频访问字段(如order_idamount)与低频大字段(如remark)拆分到不同表,通过外键关联。

生产案例(电商订单表)
某电商将原 23 字段的order表拆分为:

  • 主表order_core(10 个高频字段,如order_idamount);
  • 扩展表order_extra(存储remarklogistics_info)。

效果
ALTER TABLE order_core添加字段时,锁持有时间从 5 分钟缩短至 20 秒(元数据更少);查询主表时仅锁定 1 个数据页,行锁冲突概率下降 70%。

权威参考

  • 高性能 MySQL(第 4 版):Query Performance Optimization

2.2 预分配字段:减少ALTER TABLE操作次数

设计逻辑
业务迭代频繁时,ALTER TABLE新增字段是 MDL 锁阻塞的主因(每次操作需获取 MDL 写锁)。

优化方案

  • 预留扩展字段:添加extend_info JSON类型字段,存储未来可能新增的非结构化数据(如hobbyeducation)。
  • 版本化设计:通过version字段标记数据版本,避免物理字段新增(如 JSON 中存储v1/v2)。

生产案例(社交用户表)
某社交平台user表预定义extend_info JSON字段,年度ALTER TABLE操作从 20 次降至 3 次,MDL 锁阻塞异常减少 90%。

权威参考

  • Percona 白皮书:Schema Design for High Performance

2.3 冷热数据分离:缩小主表锁范围

设计逻辑
历史数据与实时数据混合存储,导致主表数据量过大,ALTER TABLE需扫描全表,锁范围激增。

优化方案

  • 时间分区:按月份创建RANGE分区(如p202301),历史分区仅保留查询权限。
  • 冷数据归档:通过pt-archiver将 6 个月前数据迁移至冷存储表(如order_archive)。

生产案例(物流运单表)
某物流平台waybill表原存储 3 年数据(2 亿条),优化后主表数据量降至 3000 万条。

效果
ALTER TABLE修改主表字段时,锁持有时间从 3 分钟缩短至 10 秒(仅需处理当前分区);查询时锁范围缩小 85%,长事务死锁概率下降 60%。

权威参考

  • AWS 官方博客:Large Table DDL Best Practices

三、分版本解决方案:5.7、8.0 + 与云数据库的差异

即使通过表结构设计降低了锁需求,仍需结合版本特性解决已发生的锁定异常。

3.1 MySQL 5.7:工具与语法的双重优化

5.7 不支持INSTANT ALTER,需通过INPLACE算法、pt-osc 工具及语法调优降低锁冲突。

(1)锁等待超时:指定默认值 + INPLACE 算法

核心思路:避免全表更新锁,缩短锁持有时间。

优化 SQL

sql

ALTER TABLE `delivery` 
ADD COLUMN `is_urgent` TINYINT(1) NOT NULL DEFAULT 0 -- 显式默认值,避免全表更新
ALGORITHM=INPLACE -- 原地修改(无需复制表)
LOCK=SHARED; -- 允许读,减少阻塞

效果:锁持有时间从 3 分钟缩短至 15 秒(仅元数据修改 + 少量索引调整),超时异常消失。

权威参考

  • MySQL 官方文档:Online DDL Operations
(2)MDL 锁阻塞:pt-osc 绕过 MDL 锁

工具原理:pt-osc 通过创建临时表复制数据,仅在最后切换表时短暂获取 MDL 写锁(<1 秒),绕过原表的 MDL 读锁阻塞。

操作示例

bash

pt-online-schema-change \
--user=root --password=xxx \
--host=10.0.0.1 --port=3306 \
--database=finance --table=account \
--alter="ADD COLUMN risk_score INT NULL" \
--execute

效果:MDL 锁阻塞时间从 10 分钟降至 < 1 秒,业务无感知。

权威参考

  • Percona 官方文档:pt-online-schema-change
(3)长事务死锁:低峰期操作 + LOCK=SHARED

优化策略

  • 选择业务低峰期(如凌晨)执行ALTER TABLE
  • 使用LOCK=SHARED允许读,减少写冲突。

优化 SQL

sql

ALTER TABLE `product` 
ADD COLUMN `stock_alert` TINYINT(1) NOT NULL DEFAULT 0 
ALGORITHM=INPLACE 
LOCK=SHARED; -- 允许读,禁止写(减少死锁概率)

效果:死锁概率从 15% 降至 0,业务 TPS 波动 < 5%。

3.2 MySQL 8.0+:INSTANT ALTER 与无锁操作

8.0.17 + 引入INSTANT ALTER(元数据级修改)和LOCK=NONE(无锁并发),彻底解决传统锁定问题。

(1)锁等待超时:INSTANT 算法

核心优势:仅修改元数据,锁持有时间降至毫秒级。

优化 SQL

sql

ALTER TABLE `order` 
ADD COLUMN `is_new_user` TINYINT(1) NULL 
ALGORITHM=INSTANT; -- 仅修改元数据(无需扫描数据)

效果:锁持有时间从 20 秒缩短至 0.5 秒,无超时异常。

权威参考

  • MySQL 官方文档:INSTANT ALTER TABLE
(2)MDL 锁阻塞:LOCK=NONE 无锁操作

核心优势:允许读写并发,绕过 MDL 锁。

优化 SQL

sql

ALTER TABLE `user` 
ADD COLUMN `last_login_city` VARCHAR(50) NULL 
ALGORITHM=INPLACE 
LOCK=NONE; -- 允许读写并发(8.0+支持)

效果:MDL 锁未阻塞,操作 1.2 秒完成,业务读写正常。

(3)长事务死锁:分步添加 + 异步更新

核心思路:快速添加字段(INSTANT算法),再异步更新默认值(避免锁全表)。

分步操作

sql

-- 步骤1:快速添加可为空的字段(锁表<1秒)
ALTER TABLE `transaction` 
ADD COLUMN `is_refund` TINYINT(1) NULL 
ALGORITHM=INSTANT;-- 步骤2:异步更新默认值(分批次,每次1000条)
UPDATE `transaction` 
SET `is_refund` = 0 
WHERE `is_refund` IS NULL 
LIMIT 1000;-- 步骤3:修改字段为非空(锁表<1秒)
ALTER TABLE `transaction` 
MODIFY COLUMN `is_refund` TINYINT(1) NOT NULL 
ALGORITHM=INSTANT;

效果:无死锁发生,总耗时 8 分钟(传统方法需 2 小时)。

3.3 云数据库:自动化解决锁定异常

阿里云 RDS、AWS Aurora 等云数据库通过底层架构优化,自动处理锁定异常,无需手动干预。

典型方案(阿里云 RDS):
  • Faster DDL 技术:自动选择ALGORITHM=INPLACE+ 异步复制,锁表时间从传统 2 小时缩短至 12 分钟(1 亿行表)。
  • 自动终止长事务:检测到 MDL 锁阻塞时,自动回滚无关长事务(需开启功能)。

效果:业务 TPS 波动 < 3%,无锁定异常。

权威参考

  • 阿里云帮助中心:无锁表结构变更
典型方案(AWS Aurora):
  • Fast DDL 技术:支持INSTANT ALTER和异步复制,大表 DDL 操作对业务无感知。
  • 负载感知调度:自动调整 DDL 执行优先级,避免高并发时段锁冲突。

效果:锁表时间从传统 3 小时缩短至 15 分钟,业务无中断。

权威参考

  • AWS 官方文档:Altering Tables in Amazon Aurora

四、生产案例:表结构设计 + 版本方案的协同验证

案例 1:电商平台锁等待超时与 MDL 阻塞

场景:MySQL 5.7 环境中,对 1000 万级order表添加remark字段,因未指定默认值触发全表更新锁(超时),同时存在长事务导致 MDL 阻塞。

综合方案

  • 表结构设计:垂直拆分order表为order_core(高频字段)和order_extra(大字段),减少元数据量;
  • 5.7 解决方案指定默认值+INPLACE算法(锁时间从 5 分钟→20 秒)+pt-osc(MDL 阻塞从 10 分钟→<1 秒);
  • 云数据库(RDS):自动启用 Faster DDL,锁表时间 12 分钟,业务无感知。

案例 2:金融系统长事务死锁

场景:MySQL 5.7 高并发时段,ALTER TABLE accountUPDATE account冲突,死锁导致交易成功率下降 30%。

综合方案

  • 表结构设计:冷热数据分离,将 1 年前的account数据归档至account_archive表,主表数据量减少 80%;
  • 5.7 解决方案:低峰期操作 +LOCK=SHARED(死锁概率从 20%→0);
  • 8.0 + 解决方案INSTANT+异步更新(总耗时 5 分钟,无死锁)。

五、全链路解决方案对照表

优化维度核心策略锁异常减少效果适用场景权威参考链接
表结构设计字段精简、垂直拆分、预分配字段、冷热分离80%~90%表结构冗余、数据量大场景高性能 MySQL(第 4 版)
MySQL 5.7 解决方案INPLACE 算法、pt-osc、低峰期操作70%~80%5.7 版本遗留系统pt-online-schema-change 官方文档
MySQL 8.0 + 解决方案INSTANT ALTER、LOCK=NONE、异步更新90% 以上8.0 + 新版本系统MySQL INSTANT ALTER 文档
云数据库方案Faster DDL、自动终止长事务95% 以上云环境用户阿里云无锁变更指南

六、总结与最佳实践

解决表结构修改的锁定异常,需 “预防 + 治理” 双管齐下:

  • 预防:通过字段精简、预分配字段、冷热分离等表结构设计,从源头减少锁需求与锁范围;
  • 治理:结合版本特性(5.7 的 pt-osc、8.0 + 的 INSTANT ALTER)及云数据库自动化能力,快速解决已发生的异常。

通过以上策略,可实现业务无感知的表结构修改,即使面对千万级、亿级大表,也能从容应对锁定挑战。掌握这些方法,结合权威工具与文档,可显著提升数据库变更的稳定性与效率。
权威链接

  1. MySQL 官方文档:Metadata Locks
  2. Percona pt-online-schema-change 文档
  3. MySQL INSTANT ALTER 官方文档
  4. 阿里云无锁表结构变更指南
  5. AWS Aurora Fast DDL 文档

相关文章:

解决 MySQL 表结构修改中锁定异常的全链路实战指南:从表结构设计到版本调优

引言 在 MySQL 中执行ALTER TABLE修改表结构&#xff08;如新增字段、调整字段类型&#xff09;时&#xff0c;锁定异常是最常见的阻碍。无论是 5.7 的 “锁等待超时”、8.0 的 “MDL 锁阻塞”&#xff0c;还是高并发下的 “长事务死锁”&#xff0c;本质都是表结构修改需要获…...

动态规划应用场景 + 代表题目清单(模板加上套路加上题单)

1. 序列型DP&#xff08;Sequence DP&#xff09; ✅ 应用场景 单个或多个序列&#xff08;数组/字符串&#xff09;&#xff0c;求最优子结构。 常见问题&#xff1a;最长递增子序列、最长公共子序列、回文子序列。 &#x1f9e0; 套路总结 单序列&#xff1a;dp[i] max(…...

易境通专线散拼系统:全方位支持多种专线物流业务!

在全球化电商快速发展的今天&#xff0c;跨境电商物流已成为电商运营中极为重要的环节。为了确保物流效率、降低运输成本&#xff0c;越来越多的电商卖家选择专线物流服务。专线物流作为五大主要跨境电商物流模式之一&#xff0c;通过固定的运输路线和流程&#xff0c;极大提高…...

nvm版本管理下pnpm 安装失败问题解决

检查当前使用的 Node.js 是否由 nvm 管理 nvm current 应显示类似 18.16.0 这样的版本号&#xff0c;而不是 system。如果是 system&#xff0c;说明你正在使用系统中其他位置的 Node.js 而不是 nvm 管理的版本。 切换回 nvm 管理的版本 nvm use 18.16.0清除 npm 缓存和全局安装…...

C++高频面试考点 -- 智能指针

C高频面试考点 – 智能指针 C11中引入智能指针的概念&#xff0c;方便堆内存管理。这是因为使用普通指针&#xff0c;容易造成堆内存泄漏&#xff0c;二次释放&#xff0c;程序发生异常时内存泄漏等问题。 智能指针在C11版本之后提供&#xff0c;包含在头文件<memory>中…...

06 如何定义方法,掌握有参无参,有无返回值,调用数组作为参数的方法,方法的重载

1.调用方法 2.掌握有参函数 3.调用数组作为参数 一个例题&#xff1a;数组参数&#xff0c;返回值 方法的重载 两个例题&#xff1a;冒泡排序和九九乘法表的格式学习...

使用vscode MSVC CMake进行C++开发和Debug

使用vscode MSVC CMake进行C开发和Debug 前言软件安装安装插件构建debuug方案一debug方案二其他 前言 一般情况下我都是使用visual studio来进行c开发的&#xff0c;但是由于python用的是vscode&#xff0c;所以二者如果统一的话能稍微提高一点效率。 软件安装 需要安装的软…...

C# AutoMapper对象映射详解

引言 在现代软件开发中&#xff0c;特别是采用分层架构的应用程序&#xff0c;我们经常需要在不同的对象类型之间进行转换。例如&#xff0c;从数据库实体&#xff08;Entity&#xff09;转换为数据传输对象&#xff08;DTO&#xff09;&#xff0c;或者从视图模型&#xff08…...

Keil5 MDK LPC1768 RT-Thread KSZ8041NL uIP1.3.1实现UDP网络通讯(服务端接收并发数据)

作为服务端&#xff0c;嵌入式软件实现流程&#xff1a; [上位机A/B/C/...] ↓ UDP [uIP 协议栈接收] ↓ [udp_appcall()] |-> 复制数据 |-> 保存源IP/端口 |-> 推送到接收队列 …...

提升开发运维效率:原力棱镜游戏公司的 Amazon Q Developer CLI 实践

引言 在当今快速发展的云计算环境中&#xff0c;游戏开发者面临着新的挑战和机遇。为了提升开发效率&#xff0c;需要更智能的工具来辅助工作流程。Amazon Q Developer CLI 作为亚马逊云科技推出的生成式 AI 助手&#xff0c;为开发者提供了一种新的方式来与云服务交互。 Ama…...

20250523-BUG-E1696:无法打开元数据文件“platform.winmd(已解决)

BUG&#xff1a;E1696&#xff1a;无法打开元数据文件“platform.winmd&#xff08;已解决&#xff09; 最近在用VisualStudio2022打开一个VisualStudio2017的C老项目后报了这个错&#xff0c;几经周折终于解决了&#xff0c;以下是我用的解决方法&#xff1a; 将Debug从Win32改…...

职业规划:动态迭代的系统化路径

1. 底层逻辑:构建职业规划的3大支柱 1.1 价值观锚定 1.1.1 生涯幻游法 通过想象理想生活的场景,包括工作环境、时间分配、人际关系、经济状态等,明确自己内心真正渴望的生活和工作状态,为职业规划提供方向指引。 1.1.2 价值观筛选 使用「价值观筛选卡」从30个常见职业价值…...

redisson-spring-boot-starter 版本选择

以下是更详细的 Spring Boot 与 redisson-spring-boot-starter 版本对应关系&#xff0c;按照 Spring Boot 主版本和子版本细分&#xff1a; 1. Spring Boot 3.x 系列 3.2.x 推荐 Redisson 版本&#xff1a;3.23.1&#xff08;最新稳定版&#xff0c;兼容 Redis 7.x&#xf…...

Docker run -v 的 rw 和 ro 模式_docker ro

一、前言 在使用 Docker 启动容器时&#xff0c;通常需要将宿主机的文件或目录挂载到容器中&#xff0c;以便于管理配置、持久化数据和调试日志。本篇博客将重点介绍 -v/--volume 参数的使用方式、挂载权限&#xff08;rw 与 ro&#xff09;的区别&#xff0c;以及如何通过 do…...

CentOS相关操作hub(更新中)

CentOS介绍&#xff1a; CentOS&#xff08;Community Enterprise Operating System&#xff09;是基于 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码编译的开源企业级操作系统&#xff0c;提供与 RHEL 二进制兼容的功能 完全兼容 RHEL&#xff0c;可直接使用…...

@Column 注解属性详解

提示&#xff1a;文章旨在说明 Column 注解属性如何在日常开发中使用&#xff0c;数据库类型为 MySql&#xff0c;其他类型数据库可能存在偏差&#xff0c;需要注意。 文章目录 一、name 方法二、unique 方法三、nullable 方法四、insertable 方法五、updatable 方法六、column…...

基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联

目录 一、总体架构图 二、设备端(ESP32)低功耗设计(适配 AWS IoT) 1.MQTT 设置(ESP32 连接 AWS IoT Core) 2.低功耗策略总结(ESP32) 三、云端架构(基于 AWS Serverless + IoT Core) 1.AWS IoT Core 接入 2.云端 → APP:WebSocket 推送方案 流程: 3.数据存…...

unity在urp管线中插入事件

由于在urp下&#xff0c;打包后传统的相机事件有些无法正确执行&#xff0c;这时候我们需要在urp管线中的特定时机进行处理一些事件&#xff0c;需要创建继承ScriptableRenderPass和ScriptableRendererFeature的脚本&#xff0c;示例如下&#xff1a; PluginEventPass&#xf…...

前后端的双精度浮点数精度不一致问题解决方案,自定义Spring的消息转换器处理JSON转换

在 Java 中&#xff0c;Long 是一个 64 位的长整型&#xff0c;通常用于表示很大的整数。在后端&#xff0c;Long 类型的数据没有问题&#xff0c;因为 Java 本身使用的是 64 位的整数&#xff0c;可以表示的范围非常大。 但是&#xff0c;在前端 JavaScript 中&#xff0c;Lo…...

docker安装es连接kibana并安装分词器

使用Docker部署Elasticsearch、Kibana并安装分词器有以下主要优点&#xff1a; 1. 快速部署与一致性 一键式部署&#xff1a;通过Docker Compose可以快速搭建完整的ELK栈环境 环境一致性&#xff1a;确保开发、测试和生产环境完全一致&#xff0c;避免"在我机器上能运行…...

线性回归中涉及的数学基础

线性回归中涉及的数学基础 本文详细地说明了线性回归中涉及到的主要的数学基础。 如果数学基础很扎实可以直接空降博文: 线性回归&#xff08;一&#xff09;-CSDN博客 一、概率、似然与概率密度函数 1. 概率&#xff08;Probability&#xff09; 定义&#xff1a;概率是描述…...

如何计算VLLM本地部署Qwen3-4B的GPU最小配置应该是多少?多人并发访问本地大模型的GPU配置应该怎么分配?

本文一定要阅读我上篇文章&#xff01;&#xff01;&#xff01; 超详细VLLM框架部署qwen3-4B加混合推理探索&#xff01;&#xff01;&#xff01;-CSDN博客 本文是基于上篇文章遗留下的问题进行说明的。 一、本文解决的问题 问题1&#xff1a;我明明只部署了qwen3-4B的模型…...

PostgreSQL日常维护

目录 一&#xff1a;基本使用 1.登录数据库 2.数据库操作 2.1列出库 2.2创建库 2.3删除库 2.4切换库 2.5查看库大小 3.数据表操作 3.1 列出表 3.2创建表 3.3复制表 3.4删除表 4.模式操作命令 4.1创建模式 4.2默认模式 4.3删除模式 4.4查看所有模式 4.5 在指定…...

Attu下载 Mac版与Win版

通过Git地址下载 Mac 版选择对于的架构进行安装 其中遇到了安装不成功&#xff0c;文件损坏等问题 一般是两种情况导致 1.安装版本不对 2.系统权限限制 https://www.cnblogs.com/similar/p/11280162.html打开terminal执行以下命令 sudo spctl --master-disable安装包Git下载地…...

V2X协议|如何做到“车联万物”?【无线通信小百科】

1、什么是V2X V2X&#xff08;Vehicle-to-Everything&#xff09;即“车联万物”&#xff0c;是一项使车辆能够与周围环境实现实时通信的前沿技术。它允许车辆与其他交通参与者和基础设施进行信息交互。通过V2X&#xff0c;车辆不仅具备“远程感知”能力&#xff0c;还能在更大…...

【zookeeper】--部署3.6.3

文章目录 下载解压创建data和logs配置文件1)创建目录并且编辑 zoo.cfg2)接下来将 node01 的 ZooKeeper 所有文件拷贝至 node02 和 node03。推荐从 node02 和 node03 拷贝4&#xff09;最后 vim /etc/profile 配置环境变量&#xff0c;环境搭建结束。配完环境变量后 source /etc…...

[测试_3] 生命周期 | Bug级别 | 测试流程 | 思考

目录 一、软件测试的生命周期&#xff08;重点&#xff09; 1、软件测试 & 软件开发生命周期 &#xff08;1&#xff09;需求分析 &#xff08;2&#xff09;测试计划 &#xff08;3&#xff09;测试设计与开发 &#xff08;4&#xff09;测试执行 &#xff08;5&am…...

物联网(IoT)智能项目全景指南:技术构架、实现细节与应用实践

目录 一、物联网项目的核心组成和发展方向 1. 核心组成 2. 发展趋势 二、系统设计的详细流程 1. 需求分析与方案规划 2. 硬件方案深度设计 3. 软件架构设计 4. 方案示意图&#xff08;架构图&#xff09; 三、关键技术深度剖析 1. 传感器及其接口技术 2. 嵌入式MCU选…...

【Go】1、Go语言基础

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言的特点 Go语言由Google团队设计&#xff0c;以简洁、高效、并发友好为核心目标。 具有以下优点&#xff1a; 语法简单、学习曲线平缓&#xff1a;语法关键字很少&#xff0c;且…...

RabbitMQ ⑤-顺序性保障 || 消息积压 || 幂等性

幂等性保障 幂等性&#xff08;Idempotency&#xff09; 是计算机科学和网络通信中的一个重要概念&#xff0c;指的是某个操作无论被执行多少次&#xff0c;所产生的效果与执行一次的效果相同。 应用程序的幂等性&#xff1a; 在应用程序中&#xff0c;幂等性就是指对一个系统…...