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 事务隔离级别与并发问题…...
CASS11快捷键设置
快捷键增加如下: tr----trim bo---(-boundary) ro---rotate ed----explode of---offset qs---qselect dp---ptype re---regen rec---rectang br---break dis---distuser do---draworder...
Python进行简单医学影像分析的示例
以下是一个使用Python进行简单医学影像分析的示例,这里我们以常见的DICOM格式医学影像为例,使用pydicom库读取DICOM文件,使用matplotlib进行影像显示,使用scikit - image进行简单的影像处理。 需求复现讲解 1. 安装必要的库 在…...
anaconda安装报错
一 anaconda报错 Cannot open 本地 Failed to start [powershell.exe, -ExecutionPolicy, RemoteSigned, -NoExit, -Command, & D:\anaconda3\condabin\conda.bat shell.powershell hook | Out-String | Invoke-Expression ; try { conda activate D:/anaconda3/envs/1-man…...
git从本地其他设备上fetch分支
在 Git 中,如果你想从本地其他设备上获取分支,可以通过以下几种方式实现。不过,需要注意的是,Git 本身是分布式版本控制系统,通常我们是从远程仓库(如 GitHub、GitLab 等)拉取分支,而…...
HTTP 常见状态码技术解析(应用层)
引言 HTTP 状态码是服务器对客户端请求的标准化响应标识,属于应用层协议的核心机制。其采用三位数字编码,首位数字定义状态类别,后两位细化具体场景。 状态码不仅是服务端行为的声明,更是客户端处理响应的关键依据。本文将从协议规…...
OpenBMC:BmcWeb定义service
1.定义service //src\webserver_run.cppint run() {...std::shared_ptr<sdbusplus::asio::connection> systemBus std::make_shared<sdbusplus::asio::connection>(io);crow::connections::systemBus systemBus.get();auto server sdbusplus::asio::object_serv…...
如何使用3D高斯分布进行环境建模
使用3D高斯分布来实现建模,主要是通过高斯分布的概率特性来描述空间中每个点的几何位置和不确定性。具体来说,3D高斯分布被用来表示点云数据中的每一个点或体素(voxel)的空间分布和不确定性,而不是单纯地存储每个点的坐…...
兰州百合基因组(36.68 Gb)-文献精读113
The evolutionary tale of lilies: Giant genomes derived from transposon insertions and polyploidization 百合的进化故事:由转座子插入和多倍化导致的巨型基因组 百合(Lilium spp.),被誉为“球根花卉之王”,因其…...
如何做实用、好用的矿用电子围栏(续篇)
1 写在前面 去年写了一篇文章《如何做实用、好用的矿用电子围栏》,初步探讨了一下矿用UWB的电子围栏的实现方法,阅读量超出预期,说明电子围栏需求度比较高,企业对安全生产越来越重视。当时写这篇文章时,由于时间和理解…...
【多语言生态篇三】【DeepSeek×Go:高并发推理服务设计】
第一章:项目背景与选型考量 1.1 DeepSeek推理服务的业务挑战 日均请求量突破1.2亿次(峰值QPS达38万) 典型请求特征:50ms超时限制 | 10KB输入+2KB响应 流量特征:工作日周期性波动(早10点至晚8点负载增长300%) 1.2 Go语言脱颖而出的五大优势 (敲黑板!这里用餐馆厨房…...
【ThreeJS Basics 1-5】动画 Animations
文章目录 Three JS 中的动画window.requestAnimationFrame(fn)基本代码修改显示器刷新率的对比基础的动画尝试不同帧率导致动画速率不同解决方案一:DeltaTime解决方案2:Clock方法3: 动画库 Gsap如何选择方案? Three JS 中的动画 …...
WSL进阶使用指南
WSL2通过 Hyper-V 技术创建了一个轻量级的虚拟机(VM),在这个虚拟机之上可以运行一个真正的 Linux 内核,这给希望同时使用 Windows 和 Linux 的开发人员提供了无缝高效的体验。本文会介绍一些使用WSL的知识,帮助你更好地…...
工业机器视觉3D视觉行业分析
一、行业现状与市场前景 市场规模与增长 中国工业机器视觉市场近年来呈现高速增长态势,预计2025年市场规模将达到数百亿元,年复合增长率(CAGR)超过20%579。其中,3D视觉技术因在智能制造、人形机器人、自动驾驶等领域的广泛应用,成为核心增长点。全球3D成像与传感市场预计…...
我是如何从 0 到 1 找到 Web3 工作的?
作者:Lotus的人生实验 关于我花了一个月的时间,从 0 到 1 学习 Web3 相关的知识和编程知识。然后找到了一个 Web3 创业公司实习的远程工作。 👇👇👇 我的背景: 计算机科班,学历还可以(大厂门槛水平) 毕业工…...
leetcode 题目解析 第3题 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”…...
如何通过外链提升网站SEO排名?
外链的作用非常明显,它不仅能提高网站的排名,还能增加网站的曝光量。Google排名的算法会考虑到网站的外链数量、质量和多样性。简单来说,更多的高质量外链意味着你的网站更有可信度,更容易被搜索引擎优待。 但是,过度…...
Prompt:创造性的系统分析者
分享的提示词: 你是一个创造性的系统分析者,作为咨询师,你具有以下特质: 基础能力: 深入理解我的系统性模式 识别模式间的隐藏联系 发现出人意料的关联 提供令人惊讶的洞见 工作方式: 在每次回应中至少…...
DeepSeek服务器繁忙 多种方式继续优雅的使用它
前言 你的DeepSeek最近是不是总是提示”服务器繁忙,请稍后再试。”,尝试过了多次重新生成后,还是如此。之前DeepSeek官网连续发布2条公告称,DeepSeek线上服务受到大规模恶意攻击。该平台的对话框疑似遭遇了“分布式拒绝服务攻击”࿰…...
量子计算的基本运算:Hadamard 门、CNOT 门、Pauli 门详解
量子计算是现代计算科学的前沿领域,它与经典计算机在处理信息的方式上有着本质的区别。量子计算机利用量子比特(qubit)的叠加态和量子纠缠等特性来进行计算,从而在某些特定任务上超越传统计算机。量子计算的核心运算单元是量子门,它们通过作用于量子比特来操控量子状态。本…...
mysql之Innodb数据页
Innodb数据页结构 InnoDB数据页结构一、数据页基础概念二、数据页核心结构1. 头部控制区2. 数据存储区3. 尾部与目录区 三、关键机制详解1. 记录链表与删除优化2. 页目录与二分查找3. 空间复用与碎片管理4. 数据页的合并与分裂 四、应用与性能影响1. 索引效率2. 插入优化3. 事务…...
ThinkORM模型静态方法create好像对MongoDB不支持
软件版本 think-orm:3.0PHP:8.4.1MongoDB:8.0.4 (本地单数据 非集群)注:我是在 webman 框架下使用think-orm,并非在 thinkphp框架下使用 使用场景 定义的模型如下: <?php na…...
nginx配置:nginx.conf配置文件
nginx.conf配置文件说明 基本结构 全局块:位于最外层,定义影响整个Nginx服务器的设置。事件块:配置网络连接相关的设置。HTTP块:定义HTTP服务器以及反向代理、负载均衡等特性。Server块:定义虚拟主机,即响…...
基于 PyQt5 的聊天机器人程序(AI)
这是一个基于 PyQt5 的聊天机器人程序,通过 API 接入硅基流动(Silicon Flow)或其他的聊天服务,支持用户与聊天机器人进行交互。 API 设置:通过菜单栏的“设置”选项,用户可以修改 API 地址和 API 密钥。 设…...
[实现Rpc] 服务端 | RpcRouter实现 | Builder模式
目录 项目服务端独用类的实现 1. RpcRouter类的实现 ServiceDescribe SDescribeFactory ⭕ Builder模式 1. 动机 2. 模式定义 3. 要点总结 4. 代码感受 ServiceManager RpcRouter 4. 代码感受 ServiceManager RpcRouter 前文我们就将 Rpc 通用类都实现完啦&#…...
红外人体传感器选型和电路解析
红外人体传感器选型和电路解析 背景:想要制作一套IoT系统,基于HA构建上层管理,蓝牙和蓝牙MESH构建无线网络,以及多种传感器和控制器作为底层,其中人体红外传感器作为一个重要的选项,需要考虑好。 红外人体传…...
rtthread的串口框架、485框架
一、串口接收超时中断的实现。 1. rtthread中定义的串口超时结构体 定义串口接收超时的结构体 CM_TMR0_TypeDef 为TM0的实例(实际有CM_TMR0_1 CM_TMR0_2 对应华大460的两个TMR0单元 ) channel 每个timer0有两个通道(TMR0_CHA、TMR0_CHB) clock 为FCG2_PERIPH_TMR0_1、FCG…...
Embedding模型
检索的方式有那些 关键字搜索:通过用户输入的关键字来查找文本数据。 语义搜索:它的目标是理解用户查询的真实意图,不仅考虑关键词的匹配,还考虑词汇之间的语义 (文字,语音,语调...࿰…...
如何使用Spring Boot实现商品的管理系统
1. 项目初始化 1.1 使用 Spring Initializr 创建项目 访问 Spring Initializr,进行如下配置: Project:选择 Maven Project。Language:选择 Java。Spring Boot:选择合适的版本,如 3.1.x。Group:填写项目的组织名,例如 com.example。Artifact:填写项目名称,如 general…...
最新扣子(Coze)案例教程:全自动DeepSeek 写影评+批量生成 + 发布飞书,提效10 倍!手把手教学,完全免费教程
👨💻群里有同学是做影视赛道的博主,听说最近DeepSeek这么火,咨询能不能用DeepSeek写影评,并整理电影数据资料,自动发布到飞书文档,把每天的工作做成一个自动化的流程。 那今天斜杠君就为大家…...
