mysql之事务深度解析与实战应用:保障数据一致性的基石
文章目录
- MySQL 事务深度解析与实战应用:保障数据一致性的基石
- 一、事务核心概念与原理
- 1.1 事务的本质与意义
- 1.2 事务的 ACID 特性
- 1.2.1 原子性 (Atomicity)
- 1.2.2 一致性 (Consistency)
- 1.2.3 隔离性 (Isolation)
- 1.2.4 持久性 (Durability)
- 1.3 事务隔离级别与并发问题
- 1.4 MVCC (多版本并发控制) 详解
- 1.4.1 核心组件
- 1.4.2 ReadView 可见性判断规则:
- 1.4.3 MVCC版本选择流程
- 1.5 锁机制进阶
- 二、MySQL 事务控制语句 (应用层面)
- 三、Redo Log:数据持久性的保障
- 3.1 核心概念
- 3.2 Redo Log 内部机制
- 3.3 Redo Log 写入过程
- 3.4 `innodb_flush_log_at_trx_commit` 参数
- 3.5 Checkpoint 机制
- 四、Undo Log:事务回滚与 MVCC 的基础
- 4.1 核心概念
- 4.2 Undo Log 内部机制
- 五、电商网站中的事务应用
- 5.1 用户注册
- 5.2 商品下单
- 5.3 支付流程
- 5.4 库存管理
- 5.5 退款流程
- 5.6 订单创建事务(例子)
- 5.7 分布式事务处理(XA例子)
- 六、性能优化与监控
- 6.1 长事务监控
- 6.2 锁等待调优
- 6.3 事务状态监控
- 6.4 Undo 空间监控
- 6.5 版本链膨胀处理
- 6.6 大事务处理
- 七、备份恢复模型
- 7.1 时间点恢复 (PITR)
- 7.2 崩溃恢复机制
- 八、总结与最佳实践
MySQL 事务深度解析与实战应用:保障数据一致性的基石
一、事务核心概念与原理
1.1 事务的本质与意义
事务 (Transaction) 是数据库管理系统中至关重要的概念,代表一组不可分割的操作序列。事务要么全部成功执行 (提交 - Commit),要么全部失败回滚 (Rollback)。事务的存在是为了在并发访问和系统故障的情况下,维护数据库的数据一致性和可靠性。
事务的本质是为了解决多用户并发访问数据库时,以及系统发生故障时,如何保证数据的正确性和完整性。例如银行转账:
-
账户 A 余额减少
-
账户 B 余额增加
这两个操作必须作为一个原子操作执行,要么都成功,要么都失败。事务机制避免了只执行部分操作导致的数据不一致。
1.2 事务的 ACID 特性
ACID 是衡量事务是否可靠的标准:
1.2.1 原子性 (Atomicity)
事务是不可分割的最小工作单元,所有操作要么全部成功,要么全部失败回滚。
-
机制详解: 通过 Undo Log (回滚日志) 实现。事务执行修改操作前,会将修改前的数据记录到 Undo Log。如果事务执行出错或用户主动回滚,数据库利用 Undo Log 将数据恢复到事务开始前的状态。
-
应用场景: 银行转账、电商订单创建 (订单主表和订单明细表必须同时成功或失败)。
1.2.2 一致性 (Consistency)
事务必须保证数据库从一个一致性状态转变到另一个一致性状态。数据必须符合预定义的规则和约束(例如,完整性约束、触发器、应用逻辑等)。
-
机制详解: 一致性是事务追求的最终目标。原子性、隔离性和持久性都是为了保证一致性。一致性不仅仅是数据库层面的约束,也包括应用层面的业务逻辑。 例如,转账操作不仅要保证原子性,还要保证转账金额不能为负数 (应用逻辑约束)。
-
应用场景: 库存扣减 (扣减数量不能超过当前库存)、用户账户余额更新 (余额不能小于 0)。
1.2.3 隔离性 (Isolation)
多个并发事务之间相互隔离,一个事务的执行不应该被其他事务干扰。隔离性保证了并发环境下的数据访问正确性。
-
机制详解: 通过 锁机制 (Locking) 和 多版本并发控制 (MVCC - Multi-Version Concurrency Control) 来实现。
-
锁机制: 当一个事务需要修改数据时,可以对数据加锁,阻止其他事务同时修改或读取,保证数据访问的排他性。 锁的类型包括共享锁 (Shared Lock - 读锁) 和排他锁 (Exclusive Lock - 写锁)。
-
MVCC: 为每个事务创建一个数据快照 (Snapshot),事务读取数据时,读取的是快照版本的数据,而不是最新的数据。 这样可以实现读写并发,提高系统并发性能,同时保证一定程度的隔离性。
-
**版本链:**每行数据包含 DB_TRX_ID(事务 ID)和 DB_ROLL_PTR(回滚指针),通过这两个隐藏字段,将同一行数据的不同版本串联起来,形成一个版本链。
-
ReadView 生成规则:
-
-
隔离级别 | ReadView 生成时机 |
---|---|
READ COMMITTED | 每次 SELECT 时生成 |
REPEATABLE READ | 第一次 SELECT 时生成 |
-
隔离级别: SQL 标准定义了四种事务隔离级别 (后面会详细介绍)。
-
应用场景: 电商秒杀活动 (保证库存不会超卖)、多人同时修改同一份文档 (避免数据冲突)。
1.2.4 持久性 (Durability)
一旦事务提交成功,其所做的修改就应该永久保存到数据库中,即使系统发生崩溃、断电等故障,数据也不会丢失。
-
机制详解: 通过 Redo Log (重做日志) 实现。事务提交时,InnoDB 会将事务的所有修改操作先写入 Redo Log 缓冲区,然后将 Redo Log 刷新到磁盘 (先于数据页刷新)。 即使数据库发生崩溃,重启后,MySQL 也可以通过 Redo Log 重放已经提交的事务,将数据恢复到事务提交后的状态。
-
Redo Log 双写机制:
-
事务提交时先写入 Log Buffer。
-
通过
innodb_flush_log_at_trx_commit
控制刷盘策略:-
0
:每秒刷盘。 -
1
:实时刷盘(默认)。 -
2
:写入 OS 缓存后返回。
-
-
-
-
应用场景: 支付成功记录 (支付成功后,即使系统崩溃,支付记录也不能丢失)、用户注册信息 (注册成功后,用户信息必须永久保存)。
1.3 事务隔离级别与并发问题
SQL 标准定义了四种事务隔离级别,从低到高依次为:
隔离级别 | 脏读 (Dirty Read) | 不可重复读 (Non-repeatable Read) | 幻读 (Phantom Read) | 实现机制 |
READ UNCOMMITTED (读未提交) | 可能 | 可能 | 可能 | 无特殊并发控制机制,直接读取最新数据。 |
READ COMMITTED (读已提交) | 不可能 | 可能 | 可能 | MVCC + 锁 (共享锁和排他锁)。读取数据时,总是读取已提交的最新版本。 |
REPEATABLE READ (可重复读) | 不可能 | 不可能 | 可能 (InnoDB 大大缓解) | MVCC + 锁 (共享锁、排他锁、Next-Key Locks)。事务开始时创建 ReadView,事务期间始终使用同一个 ReadView。 |
SERIALIZABLE (串行化) | 不可能 | 不可能 | 不可能 | 强制加锁 (所有读取加共享锁,所有写入加排他锁)。并发事务串行化。 |
-
脏读: 读取到另一个事务尚未提交的修改。
-
不可重复读: 同一事务内多次读取同一数据,得到不同结果。
-
幻读: 同一事务内,相同查询条件多次查询,出现之前不存在或消失的记录。
隔离级别选择建议:
-
大多数应用场景:
READ COMMITTED
或REPEATABLE READ
。 -
数据一致性要求较高,并发量适中:
REPEATABLE READ
(InnoDB 默认)。 -
数据一致性要求极高,牺牲并发性能:
SERIALIZABLE
。 -
极少场景:
READ UNCOMMITTED
(除非明确知道数据不一致性不会造成严重影响)。
1.4 MVCC (多版本并发控制) 详解
MVCC 是 InnoDB 实现 READ COMMITTED 和 REPEATABLE READ 的核心技术。为每行数据维护多个版本,通过 ReadView,让不同事务在不同时间点看到不同版本,实现读写并发,提高性能,同时保证隔离性。
1.4.1 核心组件
-
版本链 (Version Chain): InnoDB 为每行数据维护版本链,记录多个历史版本。通过隐藏字段实现:
-
DB_TRX_ID
** (事务 ID)😗* 记录最后一次更新该行的事务 ID。 -
DB_ROLL_PTR
** (回滚指针)😗* 指向 Undo Log 中记录的上一个版本的数据。
-
-
Undo Log (撤销日志): 记录数据修改前的版本信息,版本链中的
DB_ROLL_PTR
指向 Undo Log 中旧版本的数据。Undo Log 存储历史快照。 -
ReadView (一致性视图): 每个事务执行快照读时生成。ReadView 定义了“当前事务可以看到哪些版本的数据”。包含:
-
creator_trx_id
****: 创建 ReadView 的事务 ID。 -
trx_ids
****: 生成 ReadView 时,所有活跃、未提交的事务 ID 列表。 -
min_trx_id
****:trx_ids
列表中最小的事务 ID。 -
max_trx_id
****: 预分配给下一个事务的 ID,大于trx_ids
中最大的事务 ID。
-
1.4.2 ReadView 可见性判断规则:
-
DB_TRX_ID
** ==**creator_trx_id**
😗* 当前事务自己修改,总是可见。 -
DB_TRX_ID
** <**min_trx_id**
😗* 版本创建在 ReadView 之前,可见。 -
DB_TRX_ID
** >=**max_trx_id**
😗* 版本创建在 ReadView 之后,不可见。 -
min_trx_id
** <=**DB_TRX_ID**
<**max_trx_id**
😗*-
DB_TRX_ID
** 在**trx_ids**
中:** 版本创建时事务仍活跃,不可见。 -
DB_TRX_ID
** 不在**trx_ids**
中:** 版本创建时事务已提交,可见。
-
1.4.3 MVCC版本选择流程
-
获取ReadView
-
访问数据
-
可见性判断
-
可见则返回
-
不可见则沿着版本链通过
DB_ROLL_PTR
回溯,知道找到可见版本或者回溯到尽头
-
-
返回可见版本
1.5 锁机制进阶
锁类型 | 作用范围 | 解决现象 | 加锁示例 |
记录锁 | 单行记录 | 写冲突 | UPDATE users SET age=18 WHERE id=1 |
间隙锁 | 索引记录间的区间 | 幻读 | SELECT * WHERE id>10 AND id<20 FOR UPDATE |
临键锁 | 记录锁+间隙锁 | 幻读+写冲突 | SELECT * WHERE id>10 FOR UPDATE |
插入意向锁 | 插入操作的特殊间隙锁 | 并发插入优化 | INSERT INTO users(id) VALUES(15) |
二、MySQL 事务控制语句 (应用层面)
-
START TRANSACTION
** 或**BEGIN**
😗* 显式开启事务。 -
COMMIT
****: 提交事务。事务中的所有修改操作将被永久保存到数据库。 -
ROLLBACK
****: 回滚事务。撤销事务中的所有修改操作,将数据恢复到事务开始之前的状态。 -
SAVEPOINT savepoint_name
****: 在事务中设置保存点。允许在事务执行过程中回滚到指定的保存点,而不是整个事务回滚。 -
ROLLBACK TO SAVEPOINT savepoint_name
****: 回滚事务到指定的保存点。 -
RELEASE SAVEPOINT savepoint_name
****: 删除事务中定义的保存点。
三、Redo Log:数据持久性的保障
3.1 核心概念
Redo Log(重做日志)是 InnoDB 实现事务持久性 (Durability) 的关键机制。它记录事务对数据页所做的物理修改。即使数据库崩溃,也能通过 Redo Log 重演已提交事务的修改,保证数据不丢失。
-
核心作用:崩溃恢复 (Crash Recovery)。
-
Write-Ahead Logging (WAL) 预写式日志:先写日志,后写数据。
3.2 Redo Log 内部机制
-
Redo Log Buffer (内存缓冲区): 临时存放即将写入磁盘的 Redo Log 记录。
-
Redo Log Files (磁盘文件): 实际存储 Redo Log 记录的磁盘文件。循环写入,由一组固定大小的文件组成 (例如
ib_logfile0
,ib_logfile1
)。 -
Log Sequence Number (LSN) 日志序列号: 单调递增的字节偏移量,标识 Redo Log 记录位置。
3.3 Redo Log 写入过程
-
生成 Redo Log 记录: 事务修改数据页时生成。
-
写入 Redo Log Buffer: 追加到 Buffer 末尾。
-
刷新 Redo Log Buffer 到磁盘 (Flush):
-
事务提交 (由
innodb_flush_log_at_trx_commit
控制)。 -
Redo Log Buffer 空间不足。
-
后台线程定期刷新。
-
Checkpoint 时刷新。
-
-
写入 Redo Log Files: 刷新操作将日志顺序写入 Redo Log Files。
3.4 innodb_flush_log_at_trx_commit
参数
控制 Redo Log Buffer 刷盘策略:
-
0
****: 最不安全,性能最好。每秒刷新一次。 -
1
****: 最安全,性能相对较低。事务提交时立即刷新并fsync
。 -
2
****: 安全性和性能折中。事务提交时写入 OS 缓存,但不立即fsync
。
3.5 Checkpoint 机制
为了避免 Redo Log Files 被写满,InnoDB 引入 Checkpoint 机制。
-
作用:
-
缩短数据库恢复时间。
-
回收 Redo Log 文件空间。
-
-
类型:
-
Sharp Checkpoint
-
Fuzzy Checkpoint
四、Undo Log:事务回滚与 MVCC 的基础
4.1 核心概念
Undo Log (撤销日志) 用于实现事务的原子性 (Atomicity) 和 MVCC。
-
双重使命:
-
事务回滚 (Transaction Rollback): 撤销事务已做的修改。
-
MVCC: 记录数据修改前的版本,实现非阻塞读。
-
4.2 Undo Log 内部机制
-
Undo Log 类型:
-
Insert Undo Log: 用于
INSERT
操作的回滚。记录新插入记录的主键。 -
Update Undo Log: 用于
UPDATE
和DELETE
操作的回滚。记录被修改记录的旧值。
-
-
Undo Log 存储结构: 存储在 Undo Tablespace 中。
-
Rollback Segment (回滚段): Undo Log 存储和管理的基本单元。
-
每个事务对应一个 Undo 段,包含 1024 个 Undo Slot.
-
-
Undo Log 生成过程: 事务执行修改操作时生成。
-
Purge 线程: 异步清理不再需要的 Undo Log 记录。
五、电商网站中的事务应用
事务在电商网站的核心业务中至关重要:
5.1 用户注册
同时向多个表插入数据 (用户表、用户详情表、账户表等),事务保证原子性,防止数据不完整。
5.2 商品下单
涉及库存检查、库存扣减、创建订单记录、生成支付单等多个步骤,事务保证订单创建的完整性和一致性。
5.3 支付流程
涉及订单状态检查、金额验证、状态更新、账户余额变更、支付流水记录等,事务保证支付过程的正确性和资金安全。
5.4 库存管理
商品库存的各种操作 (扣减、增加、锁定、解锁等),事务保证数据一致性,防止超卖、库存数据错乱。
5.5 退款流程
涉及订单状态检查、状态更新、账户余额变更、退款流水记录等,事务保证退款操作的原子性和一致性。
5.6 订单创建事务(例子)
START TRANSACTION;
-- 1. 库存扣减(行锁)
UPDATE inventory SET stock=stock-1
WHERE product_id=1001 AND stock>0;-- 2. 创建订单记录
INSERT INTO orders(order_id,user_id,product_id)
VALUES('202308080001',123,1001);-- 3. 支付流水记录
INSERT INTO payment_flow(order_id,amount)
VALUES('202308080001',99.99);COMMIT;
优化要点:
-
库存扣减使用乐观锁(version字段)或者
FOR UPDATE
-
订单表按用户ID分库分表
-
支付流水异步写入消息队列
5.7 分布式事务处理(XA例子)
-- 协调者(订单服务)
XA START 'order_transaction';
UPDATE orders SET status=1 WHERE order_id=1001;
XA END 'order_transaction';
XA PREPARE 'order_transaction';-- 参与者(库存服务)
XA START 'stock_transaction';
UPDATE inventory SET stock=stock-1 WHERE product_id=1001;
XA END 'stock_transaction';
XA PREPARE 'stock_transaction';-- 全局提交
XA COMMIT 'order_transaction';
XA COMMIT 'stock_transaction';
六、性能优化与监控
6.1 长事务监控
-- 查看运行中事务
SELECT * FROM information_schema.INNODB_TRX
WHERE TIME_TO_SEC(TIMEDIFF(NOW(),trx_started)) > 60;-- 强制回滚长事务(需super权限)
KILL QUERY [trx_mysql_thread_id];
6.2 锁等待调优
-- 设置锁超时时间(默认50秒)
SET GLOBAL innodb_lock_wait_timeout=30;-- 死锁自动检测(默认开启)
SHOW VARIABLES LIKE 'innodb_deadlock_detect';-- 查看锁等待关系
SELECT * FROM performance_schema.data_lock_waits;
6.3 事务状态监控
-- 查看当前锁信息
SHOW ENGINE INNODB STATUS\G -- 关注 LATEST DETECTED DEADLOCK 和 TRANSACTIONS 部分-- 查看事务日志配置
SELECT @@innodb_log_file_size, @@innodb_log_files_in_group; -- Redo Log 文件配置-- 分析事务性能
SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT/1000000 AS wait_ms
FROM performance_schema.events_waits_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'wait/io/innodb%';
6.4 Undo 空间监控
-- 查看Undo空间使用
SELECTtablespace_name,file_size/1024/1024 AS file_size_mb,allocated_size/1024/1024 AS allocated_mb
FROM information_schema.FILES
WHERE file_type='UNDO LOG';
6.5 版本链膨胀处理
-- 定期清理历史版本
OPTIMIZE TABLE large_table; -- 重建表空间
6.6 大事务处理
-- 分批次处理(减少Undo积累)
START TRANSACTION;
DELETE FROM order_log WHERE created_at < '2023-01-01' LIMIT 1000;
COMMIT;
-- 循环执行直至完成
七、备份恢复模型
7.1 时间点恢复 (PITR)
操作流程:
-
全量备份:
mysqldump --single-transaction --master-data=2 -uroot -p dbname > backup.sql
-
恢复步骤:
bash mysql -uroot -p dbname < backup.sql mysqlbinlog --start-position=107 /var/log/mysql/bin.000001 | mysql -uroot -p
7.2 崩溃恢复机制
三阶段恢复过程:
-
前滚 (Redo): 通过 Redo Log 重做已提交事务。
-
回滚 (Undo): 通过 Undo Log 回滚未提交事务。
-
清理: 清除临时对象,确保数据一致性。
八、总结与最佳实践
-
理解 ACID 特性: 深刻理解 ACID 特性是掌握事务的核心。
-
选择合适的隔离级别: 根据应用场景选择合适的事务隔离级别。
REPEATABLE READ
通常是最佳选择。 -
显式控制事务: 使用
START TRANSACTION
,COMMIT
,ROLLBACK
等语句显式控制事务边界。 -
事务要尽可能小: 事务范围应尽可能小,只包含必要的数据库操作。
-
避免长事务: 避免长时间运行的事务。 长事务会占用数据库资源, 降低系统性能, 并可能导致锁等待, 死锁等问题. 如果业务流程确实需要长时间运行,可以考虑将大事务拆分成多个小事务,或者使用其他技术手段 (例如,消息队列、最终一致性) 来解决。
-
关注事务的性能: 避免过度使用事务,或者不合理地使用事务。在 OLTP 系统中重点优化短事务处理,分布式场景优先考虑柔性事务方案。
-
监控 Redo Log 和 Undo Log: 监控 Redo Log 的写入速度、刷新频率,Undo Log 的空间使用情况,以及长事务。
-
金融级系统保持
**innodb_flush_log_at_trx_commit=1**
,电商等高并发场景可适当放宽至2以提升吞吐量。 -
对于需要保存历史版本的特殊场景,可考虑使用Flashback技术或临时关闭自动清理机制。
事务是数据库提供的强大工具,正确理解和使用事务,可以有效保障数据的一致性和可靠性。在电商网站等高并发场景中,事务是不可或缺的核心技术。
相关文章:
mysql之事务深度解析与实战应用:保障数据一致性的基石
文章目录 MySQL 事务深度解析与实战应用:保障数据一致性的基石一、事务核心概念与原理1.1 事务的本质与意义1.2 事务的 ACID 特性1.2.1 原子性 (Atomicity)1.2.2 一致性 (Consistency)1.2.3 隔离性 (Isolation)1.2.4 持久性 (Durability) 1.3 事务隔离级别与并发问题…...
einops测试
文章目录 1. einops2. code3. pytorch 1. einops einops 主要是通过爱因斯坦标记法来处理张量矩阵的库,让矩阵处理上非常简单。 conda : conda install conda-forge::einopspython: 2. code import torch import torch.nn as nn import torch.nn.functional as…...
华为云deepseek大模型平台:deepseek满血版
华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 1、注册: 华为云deepseek大模型平台注册:https://cloud.siliconflow.cn/i/aDmz6aVN 说明:填写邀请码的话邀请和被邀请的账号都会获得2000 万 Tokens;2个帐号间不会与其他关联…...
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
作者:Hemant Malik 及 Joan Fontanals Martnez 探索如何使用 Elasticsearch Open Inference API 访问 Jina AI 模型。 我们在 Jina AI 的朋友们将 Jina AI 的嵌入模型和重新排名产品的原生集成添加到 Elasticsearch 开放推理 API 中。这包括对行业领先的多语言文本嵌…...
在PHP Web开发中,实现异步处理有几种常见方式的优缺点,以及最佳实践推荐方法
1. 消息队列 使用消息队列(如RabbitMQ、Beanstalkd、Redis)将任务放入队列,由后台进程异步处理。 优点: 任务持久化,系统崩溃后任务不丢失。 支持分布式处理,扩展性强。 实现步骤: 安装消息…...
如何设计app测试用例
功能测试 测试方法:等价类划分法、边界值法、场景法、因果图法。优先级设定:核心业务功能设为高优先级。需求覆盖 正向场景、反向场景、关联接口串场景 与后端开发确认测试用例是否全面覆盖后端逻辑。和产品确认用例是否覆盖本次需求,以及是否…...
《炒股养家心法.pdf》 kimi总结
《炒股养家心法.pdf》这篇文章详细阐述了一位超级游资炒股养家的心得与技巧,展示了其从40万到10亿的股市传奇。以下是文章中炒股技巧和心得的详细总结: 1.核心理念 市场情绪的理解:炒股养家强调,股市的本质是群体博弈,…...
DVWA 靶场
DVWA 靶场的通关 刚建立和使用 输入 http://dvwa:8898/setup.php //进入用户名 密码 dvwa 你自己设计的想要进入数据库 点击creat 用户名 密码 admin passwordAttack type Sniper模式 在Sniper模式下,Payload字典用于逐个替换请求中标记的位置。例如&#x…...
【C语言】(一)数据在计算机中的存储与表示
目录 一、存储单位(比特/字节) 二、数制/进制(二/八/十/十六) 三、码制(原码/反码/补码/移码) 四、二进制表示小数 (一)定点数 (二)浮点数 十进制转化…...
大语言模型微调的公开JSON数据
大语言模型微调的公开JSON数据 以下是一些可用于大语言模型微调的公开JSON数据及地址: EmoLLM数据集 介绍:EmoLLM是一系列能够支持理解用户、帮助用户心理健康辅导链路的心理健康大模型,其开源了数据集、微调方法、训练方法及脚本等。数据集按用处分为general和role-play两种…...
solidity之Foundry安装配置(一)
一门面向合约的高级编程语言,主要用来编写以太坊只能合约。 Solidity受C语言,Python和js影响,但为编译成为以太坊虚拟机字节码在EVM上执行,很多特性和限制都和EVM相关。 Solidity 是静态类型语言,支持继承、库、自定义…...
【个人开源】——从零开始在高通手机上部署sd(二)
代码:https://github.com/chenjun2hao/qualcomm.ai 推理耗时统计 单位/ms 硬件qnncpu_clipqnncpu_unetqnncpu_vaehtp_cliphtp_unethtp_vae骁龙8 gen124716.994133440.39723.215411.097696.327 1. 下载依赖 下载opencv_x64.tar,提取码: rrbp下载opencv_aarch64.t…...
【精调】LLaMA-Factory 快速开始4 自定义个一个sharegpt数据集并训练
数据格式说明 LLaMA Factory:微调LLaMA3模型实现角色扮演 数据集 参考 开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-LoRA微调-LLaMA-Factory-单机单卡-V100(一) 大神给出的数据集的讲解:注册 如...
【Java】单例模式
单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 单例模式包含懒汉式和饿汉式,运行有且仅有一个实例化对象,只会…...
REACT--组件通信
组件之间如何进行通信? 组件通信 组件的通信主要借助props传递值 分为整体接收、解构接收 整体接收 import PropTypes from prop-types;//子组件 function Welcome(props){return (<div>hello Welcome,{props.count},{props.msg}</div>) }// 对 We…...
第16届蓝桥杯模拟赛3 python组个人题解
第16届蓝桥杯模拟赛3 python组 思路和答案不保证正确 1.填空 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问, 2024 的最大的质因数是多少? 因为是填空题,所以直接枚举2023~2 &am…...
FFMPEG编码容错处理解决办法之途径----升级库文件
在qt开发环境下接收网络数据,调用ffmpeg解码播放视频,出现闪屏现象,具体现象可以使用操作系统自带的ffplay播放器播放原始视频流可复现;而使用操作系统自带的mpv播放器播放视频则不会出现闪屏;闪屏时会报Could not fin…...
kkFileView报错no office manager available
背景 部署环境:虚机Linux系统 发生问题的版本:4.1.0-SNAPSHOT 现象:有的docx文件可以预览,有的不可以。不可以的就怎么打开都不可以(不管你是躺着,站着,坐着,睡着,趴着都不行,哈哈) 报错内容 贴出主要的报错内容步骤: > no office manager available > tr…...
C++ 设计模式-模板方法模式
文件处理 #include <iostream>// 抽象基类:定义模板方法和抽象步骤 class DataProcessor { public:// 模板方法(固定流程)void Process() {OpenFile();ProcessData(); // 由子类实现CloseFile();}protected:virtual void ProcessData…...
MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用
目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…...
区块链相关方法-波士顿矩阵 (BCG Matrix)
波士顿矩阵(BCG Matrix),又称市场增长率 - 相对市场份额矩阵、波士顿咨询集团法、四象限分析法、产品系列结构管理法等,由美国著名的管理学家、波士顿咨询公司创始人布鲁斯・亨德森于 1970 年首创1。以下是关于波士顿矩阵的详细介…...
命令执行漏洞 Command Execute
命令执行漏洞(Command Injection)是一种安全漏洞,指的是攻击者能够在应用程序的命令行中注入并执行恶意命令。简单来说,就是攻击者可以利用这个漏洞让程序执行自己指定的命令,而不是程序原本应该执行的命令。 举个例子…...
黑马点评_商品信息缓存模块
保证缓存不要有空档期 删除后马上要写入中间不能插入任何阶段(如查询数据库) 对于单体系统1,将缓存与数据库操作放在同一个事务中(当前项目就是一个单体项目,所以选择这种方式) 对于分布式系统2,利用TCC(Tr…...
socket()函数的概念和使用案例
socket()函数的概念(C语言) 在C语言中,socket() 函数是用于创建一个新的套接字,它是网络编程的基础。套接字可以看作是不同计算机进程间通信的一个端点,允许数据在网络中的发送和接收。 socket() 函数的原型定义在 &l…...
【架构】事件驱动架构(Event - Driven Architecture,EDA)
一、事件驱动架构理论基础 事件驱动架构(Event - Driven Architecture,EDA)是一种软件设计范式,事件驱动的体系结构由生成事件流、侦听这些事件的事件使用者以及将事件从生成者传输到使用者的事件通道组成。 在事件驱动架构中,系统的行为由事件触发。事件可几乎实时发送,…...
三、linux字符驱动详解
在上一节完成NFS开发环境的搭建后,本节将探讨Linux字符设备驱动的开发。字符设备驱动作为Linux内核的重要组成部分,主要负责管理与字符设备(如串口、键盘等)的交互,并为用户空间程序提供统一的读写操作接口。 驱动代码…...
14.9 Auto-GPT 提示工程深度解析:设计具备自主决策能力的智能体大脑
Auto-GPT 提示工程深度解析:设计具备自主决策能力的智能体大脑 关键词:Auto-GPT 提示工程、结构化提示模板、工具调用触发、动态上下文管理、自主决策优化 1. 自主智能体提示设计的核心原则 Prompt 设计三维度模型: #mermaid-svg-jHMGjPZTQA8Op385 {font-family:"tre…...
【p-camera-h5】 一款开箱即用的H5相机插件,支持拍照、录像、动态水印与样式高度定制化。
【开源推荐】p-camera-h5:一款轻量级H5相机插件开发实践 一、插件背景 在Web开发中,原生摄像头功能的集成往往面临以下痛点: 浏览器兼容性问题视频流与水印叠加实现复杂移动端适配困难功能定制成本高 为此,p-camera-h5 —— 一…...
c++中sleep是什么意思(不是Sleep() )
sleep 函数在 C 语言中用于暂停程序执行指定的秒数,语法为 sleep(unsigned int seconds)。当 seconds 为 0 时,函数立即返回,否则函数将使进程暂停指定的秒数,并返回实际暂停的时间。 sleep 函数在 C 中的含义 sleep 函数是 C 标…...
优品指标树
目录 大势型 超买超卖型 超势型 能量型 成交量型 均线型 路径型 指南针经典指标 神系经典指标 庄家克星经典指标 大智慧经典指标 钱龙经典指标 同花顺经典指标 通达信经典指标 操盘手经典指标 期货特色指标 股票特色推荐 用户推荐共享指标 名家经典战法指标…...
springboot多实例部署时,@Scheduled注释的方法重复执行
问题:springboot多实例部署时,Scheduled注释的方法重复执行 在 Spring Boot 中要实现 Redis 的SET NX EX命令,可以借助 Spring Data Redis 来完成。SET NX EX命令用于在键不存在时设置键值对,并同时设置过期时间。 <dependen…...
智能自动化新纪元:AI与UiPath RPA的协同应用场景与技术实践
智能自动化新纪元:AI与UiPath RPA的协同应用场景与技术实践 引言 在数字化转型的浪潮中,企业对于自动化技术的需求已从简单的任务执行转向更复杂的智能决策。传统RPA(Robotic Process Automation)通过模拟人类操作处理重复性任务…...
[STM32 - 野火] - - - 固件库学习笔记 - - - 十六.在SRAM中调试代码
一、简介 在RAM中调试代码是一种常见的嵌入式开发技术,尤其适用于STM32等微控制器。它的核心思想是将程序代码和数据加载到微控制器的内部RAM(SRAM)中运行,而不是运行在Flash存储器中。这种方法在开发过程中具有显著的优势&#…...
nginx 反向代理 配置请求路由
nginx | 反向代理 | 配置请求路由 nginx简介 Nginx(发音为“Engine-X”)是一款高性能、开源的 Web 服务器和反向代理服务器,同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔西索夫(Igor Sysoev)于 2004…...
第二届粤港澳大湾区数字经济与人工智能国际学术会议(DEAI 2025)
重要信息 2025年3月28-30日 I 广东省东莞市(广东科技学院-松山湖校区) I www.icdeai.com 简介 第二届粤港澳大湾区数字经济与人工智能(DEAI 2025)将在2025年3月28-30日在广东省东莞市隆重举行。来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、…...
使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF
代码写了两个小时,速度太慢(包括学习文档的时间) #include <stdio.h> #include <Windows.h> #include <gdiplus.h> #include <string.h> using namespace Gdiplus; #pragma comment(lib, "Gdiplus.lib") …...
贪心算法
int a[1000], b5, c8; swap(b, c); // 交换操作 memset(a, 0, sizeof(a)); // 初始化为0或-1 引导问题 为一个小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆,第i个房间有J[i] 磅的五香豆…...
如何查询网站是否被百度蜘蛛收录?
一、使用site命令查询 这是最直接的方法。在百度搜索框中输入“site:你的网站域名”,例如“site:example.com”(请将“example.com”替换为你实际的网站域名)。如果搜索结果显示了你的网站页面,并且显示了收录的页面数量…...
Hutool - Log:自动识别日志实现的日志门面
一、简介 在 Java 开发中,日志记录是一项非常重要的功能,它可以帮助开发者在开发和生产环境中监控程序的运行状态、排查问题。然而,Java 生态系统中有多种日志实现框架,如 Log4j、Logback、JDK 自带的日志框架等。为了在不同的项…...
【GPU驱动】- 状态机
一、概述 Mesa 是一个开源的图形库,它提供了一个通用的图形抽象层,支持多种硬件和驱动程序。Mesa 的核心组件之一是 State Tracker,它在抽象图形 API(如 OpenGL )与具体的图形驱动之间起到桥梁作用。State Tracker 通…...
rtcwake - Linux下定时唤醒计算机
rtcwake 是一个用于通过实时时钟(RTC)唤醒计算机的工具。它常用于在 Linux 系统中设置计算机在指定时间自动唤醒或关闭。以下是对命令 rtcwake -m off -s ${sleep_time} 的详细解析: 命令解析 bash复制 rtcwake -m off -s ${sleep_time} 1…...
MySQL 日志
MySQL 日志 慢查询日志(Slow query log) 慢查询⽇志由执⾏时间超过系统变量 long_query_time 指定的秒数的SQL语句组成,并且检 查的⾏数⼤于系统变量 min_examined_row_limit 指定值。被记录的慢查询需要进⾏优化, 可以使⽤mysqldumpslow客⼾端程序对慢…...
C++ 泛型编程之补充(class 和typename)
目录 1.class 和 typename 可互换 1.1 template 和 template 在模板参数列表中完全一样,可以互换使用。 2.什么时候 class 和 typename 不一样? 2.1 嵌套依赖类型 时必须用typename 重点说明: 2.2 普通作用域(不能互换&…...
[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction
论文网址:[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码:GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …...
跟着 Lua 5.1 官方参考文档学习 Lua (6)
文章目录 2.11 – Coroutines 2.11 – Coroutines Lua supports coroutines, also called collaborative multithreading. A coroutine in Lua represents an independent thread of execution. Unlike threads in multithread systems, however, a coroutine only suspends i…...
Spring Cloud — Hystrix 服务隔离、请求缓存及合并
Hystrix 的核心是提供服务容错保护,防止任何单一依赖耗尽整个容器的全部用户线程。使用舱壁隔离模式,对资源或失败单元进行隔离,避免一个服务的失效导致整个系统垮掉(雪崩效应)。 1 Hystrix监控 Hystrix 提供了对服务…...
加油站(力扣134)
既然每一个加油站都有对应的加油量和耗油量,我们不妨计算一下每个加油站的汽油净增量。如果每个加油站净增量之和不为负数,则说明一定可以找到唯一的起始点。那我们该如何找到这个起始点呢?我们设置最开始的起点为第0个加油站,接着…...
科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal
三个IP 你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP。 在不同的场景下,需要选用不同的 IP 地址,如下为各自的特点及适用场景: 127.0.0.1(回环地址) 特点 127.0.0.1 是一个特殊的 IP 地…...
Golang 相关的github 开源项目
1. pan-light url: http://github.com/peterq/pan-lightstar: 12.1kfork: 2.5kwatch: 284 用Golang和Qt5编写的不限速版百度网盘。相比之前版本的百度网盘客户端,当前版本拥有更友好、便捷的图形界面,体量更轻,便于使用,只需下载…...
数据结构《图》
数据结构《图论》 图的性质 一、无向图(Undirected Graph) 定义 由一组顶点(Vertex)和一组无向边(Edge)构成。 每条无向边用一条无方向的线段连接两个顶点,记为 ( (u, v) ),其中…...