🗄️ Redis & MySQL 架构对比

内存数据库 vs 关系型数据库的核心架构

Redis 主要架构

客户端层 redis-cli Jedis / Lettuce redis-py Spring Data Redis RESP 协议 (TCP) 网络层 TCP Socket 监听 (默认端口 6379) 协议层 RESP 协议解析器 命令处理 命令分发器 commandDispatch() 命令执行器 call() → execCommand() 回复构建器 addReply() 数据结构 String SDS (Simple Dynamic String) List quicklist / listpack Hash dict + listpack Set dict / intset ZSet (Sorted Set) skiplist + dict + listpack 存储引擎 内存管理 jemalloc / 内存淘汰策略 (LRU/LFU/TTL) 持久化机制 RDB 快照 (bgsave) AOF 日志 (append only file) 高可用 主从复制 Master → Slave (异步复制) 哨兵 Sentinel 自动故障转移 + 监控 集群 Cluster 16384 Slots / 数据分片 / Gossip 事件模型 事件驱动模型 (epoll / kqueue / select) 文件事件 (I/O) + 时间事件 (定时任务 / 过期键清理) ✦ 单线程模型 (核心命令处理) ✦ 原子操作 ✦ 10W+ QPS ✦ 毫秒级延迟 ✦ 丰富的数据结构

MySQL 主要架构

客户端层 mysql CLI JDBC / Navicat MySQL Connector ORM (MyBatis/Sequelize) MySQL Protocol (TCP) 连接管理 连接池管理 (Connectors) 认证 (Authentication) · 线程管理 (Thread Pool) · 连接限制 (max_connections) SQL 接口 SQL Interface — DML / DDL / DCL / 事务控制 解析器 词法 / 语法解析器 Lexer + Parser → AST (抽象语法树) 预处理器 语义检查 · 表/列存在性校验 · 权限验证 优化器 查询优化器 (Query Optimizer) 基于代价优化 (CBO) · 执行计划选择 · 索引选择 · 表连接顺序优化 · 子查询优化 执行器 执行引擎 (Executor) 调用存储引擎 API · 逐行/批量返回结果 插件体系 UDF / 全文索引 / 审计 存储引擎层 InnoDB (默认引擎) 事务支持 · 行级锁 · MVCC · 聚簇索引 · 外键 MyISAM 表级锁 · 全文索引 Memory 内存存储 · Hash 索引 Server 层 API InnoDB 引擎 InnoDB 内存结构 Buffer Pool 数据页 + 索引页缓存 Log Buffer Redo Log 缓冲区 Adaptive Hash 自适应哈希索引 Change Buffer 二级索引变更缓存 InnoDB 磁盘结构 表空间 (.ibd) 数据 + 索引 (B+Tree) Redo Log WAL 日志 (循环写) Undo Log MVCC / 事务回滚 Doublewrite Buffer 部分写失效恢复 刷盘 文件系统 磁盘文件系统 (ext4 / xfs / NTFS) 硬件 物理磁盘 (SSD / HDD) + 内存 (Buffer Pool) ✦ Server 层 + 存储引擎分离 ✦ ACID 事务 ✦ MVCC 并发控制 ✦ B+Tree 索引 ✦ 可插拔引擎架构