技术体系构建

技术学习骨架:

  1. 是什么
  2. 为什么
  3. 怎么实现
  4. 有什么问题
  5. 怎么优化
  • 基础层
  • 原理层
  • 架构层
  • 实战层

Redis 知识体系

1. Redis 基础知识

1.1 Redis 简介

  • Redis 是什么
  • Redis 为什么快
  • Redis 的特点
  • Redis 使用场景
  • Redis 和 Memcached 区别
  • Redis 单线程模型
  • Redis 6.0 多线程
  • Redis 为什么单线程还快

1.2 Redis 优缺点

优点

  • 基于内存
  • 单线程避免锁竞争
  • IO 多路复用
  • 丰富的数据结构
  • 高性能
  • 支持持久化
  • 支持集群

缺点

  • 内存昂贵
  • 数据一致性问题
  • 缓存穿透
  • 缓存击穿
  • 缓存雪崩
  • 热Key问题
  • 大Key问题

1.3 Redis 线程模型

  • Reactor 模型
  • IO 多路复用
  • epoll
  • select
  • poll
  • 文件事件处理器
  • 命令请求处理流程

1.4 Redis 网络模型

  • BIO
  • NIO
  • IO 多路复用
  • Reactor

2. Redis 数据类型与底层结构

2.1 RedisObject

  • type
  • encoding
  • ptr
  • refcount
  • lru

2.2 String

使用场景

  • 缓存
  • 计数器
  • 分布式锁
  • Session

底层结构

  • int
  • embstr
  • raw
  • SDS

SDS

  • len
  • alloc
  • buf
  • 空间预分配
  • 惰性释放
  • 二进制安全

2.3 List

使用场景

  • 消息队列
  • 最新列表
  • 评论列表

底层结构

  • ziplist
  • linkedlist
  • quicklist

quicklist

  • 双向链表
  • ziplist 压缩

2.4 Hash

使用场景

  • 用户信息
  • 商品信息

底层结构

  • ziplist
  • hashtable

2.5 Set

使用场景

  • 去重
  • 共同好友
  • 标签系统

底层结构

  • intset
  • hashtable

2.6 ZSet

使用场景

  • 排行榜
  • 延迟队列
  • 权重排序

底层结构

  • ziplist
  • skiplist

跳表

  • 多层索引
  • 时间复杂度
  • 为什么不用红黑树

2.7 Bitmap

  • 用户签到
  • 在线统计

2.8 HyperLogLog

  • UV统计
  • 基数统计

2.9 GEO

  • 附近的人
  • 距离计算

2.10 Stream

  • 消息队列
  • 消费组
  • ACK机制

3. Redis 过期机制与淘汰策略

3.1 过期机制

  • 定时删除
  • 惰性删除
  • 定期删除

3.2 内存淘汰策略

不淘汰

  • noeviction

LRU

  • allkeys-lru
  • volatile-lru

LFU

  • allkeys-lfu
  • volatile-lfu

random

  • allkeys-random
  • volatile-random

TTL

  • volatile-ttl

3.3 LRU 原理

  • 最近最少使用
  • Redis 近似 LRU

3.4 LFU 原理

  • 使用频率统计
  • Counter

4. Redis 持久化

4.1 RDB

原理

  • save
  • bgsave
  • fork
  • copy-on-write

优点

  • 恢复快
  • 文件小

缺点

  • 数据丢失风险

4.2 AOF

原理

  • 命令追加
  • appendfsync

刷盘策略

  • always
  • everysec
  • no

AOF 重写

  • rewrite
  • bgrewriteaof

4.3 混合持久化

  • RDB + AOF

4.4 持久化对比

  • 性能
  • 数据安全
  • 文件大小

5. Redis 高可用

5.1 主从复制

原理

  • PSYNC
  • backlog
  • replication id

流程

  • 全量复制
  • 增量复制

问题

  • 主从延迟
  • 数据不一致

5.2 哨兵 Sentinel

功能

  • 监控
  • 自动故障转移
  • 通知

原理

  • 心跳检测
  • 选举机制

5.3 Redis Cluster

核心

  • 16384 槽
  • CRC16
  • Gossip 协议

特点

  • 去中心化
  • 自动分片

问题

  • 数据迁移
  • 热点槽位

6. Redis 缓存问题

6.1 缓存穿透

原因

  • 查询不存在数据

解决

  • 布隆过滤器
  • 缓存空值

6.2 缓存击穿

原因

  • 热Key失效

解决

  • 互斥锁
  • 永不过期

6.3 缓存雪崩

原因

  • 大量Key同时失效

解决

  • TTL随机
  • 多级缓存
  • 限流降级

6.4 双写一致性

方案

  • 先删缓存再更新数据库
  • 延迟双删
  • Canal + MQ

6.5 热Key问题

  • 本地缓存
  • 热点拆分

6.6 大Key问题

  • 拆分
  • scan 删除

7. Redis 分布式锁

7.1 set nx ex

  • 原子性
  • 超时时间

7.2 Lua 脚本

  • 保证原子删除

7.3 Redisson

  • 看门狗机制
  • 自动续期

7.4 RedLock

  • 多节点加锁
  • CAP问题

7.5 分布式锁问题

  • 锁误删
  • 死锁
  • 锁续期
  • 时钟漂移

8. Redis 事务

命令

  • MULTI
  • EXEC
  • DISCARD
  • WATCH

特点

  • 不支持回滚
  • CAS机制

9. Redis Pipeline

原理

  • 批量发送
  • 减少RTT

使用场景

  • 批量操作

10. Redis 发布订阅

Pub/Sub

  • publish
  • subscribe

缺点

  • 消息丢失
  • 不可靠

11. Redis Stream

特点

  • 持久化
  • 消费组
  • ACK

对比 MQ

  • Kafka
  • RocketMQ

12. Redis 性能优化

12.1 大Key优化

  • 拆分Key
  • 压缩数据
  • scan 删除

12.2 热Key优化

  • 本地缓存
  • 热点拆分

12.3 Pipeline

  • 批量提交

12.4 批量操作

  • mget
  • mset

12.5 避免阻塞命令

  • keys
  • flushall
  • flushdb

12.6 Scan 替代 keys

  • scan
  • hscan
  • sscan
  • zscan

12.7 内存优化

  • 压缩结构
  • 合理TTL

12.8 惰性删除优化

  • active-expire-cycle

13. Redis 运维

13.1 监控

  • info
  • monitor
  • slowlog

13.2 慢查询

  • slowlog get

13.3 内存分析

  • memory usage
  • memory doctor

13.4 数据迁移

  • redis-shake
  • migrate

14. Redis 面试高频

基础

  • Redis 为什么快
  • Redis 为什么单线程

数据结构

  • SDS 为什么优于 C 字符串
  • 跳表为什么比红黑树适合 Redis

持久化

  • RDB 和 AOF 区别
  • fork 为什么会阻塞

高可用

  • 主从复制原理
  • Cluster 为什么是16384

缓存

  • 缓存穿透怎么解决
  • 双写一致性怎么做

分布式

  • Redis 分布式锁安全吗
  • RedLock 有什么问题

15. Redis 实战体系

秒杀系统

  • Redis预扣库存
  • Lua原子扣减
  • MQ削峰

排行榜系统

  • zset

延迟队列

  • zset
  • stream

点赞系统

  • bitmap
  • set

IM聊天

  • pub/sub
  • stream

16. Redis 学习路线

第一阶段

  • String/List/Hash/Set/ZSet
  • 常用命令

第二阶段

  • 数据结构
  • SDS
  • skiplist

第三阶段

  • 持久化
  • 主从
  • 哨兵
  • Cluster

第四阶段

  • 缓存问题
  • 分布式锁
  • 高并发

第五阶段

  • 源码
  • 网络模型
  • Reactor
  • IO多路复用

mysql

基础:数据库设计、sql语句、索引
底层:事务与锁、sql优化、innodb原理、sql执行流程、索引原理、日志系统
架构:主从复制、分库分表
实战:Mybatis、Spring、Redis结合

MySQL 全面知识体系(面试 + 实战 + 底层原理)

1. MySQL 基础

1.1 MySQL 架构

  • Client 层
  • 连接器
  • 查询缓存(8.0 已移除)
  • 分析器
  • 优化器
  • 执行器
  • 存储引擎层
  • 文件系统
  • SQL 执行流程
  • 一条 SQL 的生命周期
  • Server 层和存储引擎层区别
  • MySQL 为什么快
  • MySQL 和 PostgreSQL 区别
  • MySQL 5.7 与 8.0 区别
  • MySQL 数据目录结构
  • 用户权限体系

1.2 数据类型

数值类型

  • tinyint
  • smallint
  • mediumint
  • int
  • bigint
  • float
  • double
  • decimal
  • 有符号与无符号
  • 精度问题

字符串类型

  • char
  • varchar
  • text
  • blob
  • enum
  • set
  • utf8 与 utf8mb4
  • varchar 为什么不能无限长
  • char 和 varchar 区别
  • text 是否能建索引

日期时间类型

  • date
  • datetime
  • timestamp
  • time
  • year
  • datetime 与 timestamp 区别
  • 时区问题

1.3 常用 SQL

  • DDL
  • DML
  • DQL
  • DCL
  • TCL
  • create
  • alter
  • drop
  • truncate
  • select
  • insert
  • update
  • delete
  • replace into
  • insert ignore
  • on duplicate key update
  • group by
  • having
  • order by
  • limit
  • distinct
  • union
  • union all
  • exists
  • in
  • between and
  • like
  • regexp
  • case when
  • 子查询
  • 相关子查询
  • join
  • inner join
  • left join
  • right join
  • self join
  • cross join

1.4 SQL 执行顺序

  • from
  • join
  • on
  • where
  • group by
  • having
  • select
  • distinct
  • order by
  • limit

1.5 explain 执行计划

  • explain 字段详解
  • id
  • select_type
  • table
  • type
  • possible_keys
  • key
  • key_len
  • rows
  • filtered
  • extra
  • using filesort
  • using temporary
  • using index
  • using where
  • explain 分析慢 SQL
  • explain possible_keys 与 key 区别
  • explain type 性能等级

2. 存储引擎

2.1 存储引擎分类

  • InnoDB
  • MyISAM
  • Memory
  • Archive
  • CSV
  • NDB
  • Falcon

2.2 InnoDB

  • 聚簇索引
  • 非聚簇索引
  • 页结构
  • 区结构
  • 段结构
  • Buffer Pool
  • Change Buffer
  • Adaptive Hash Index
  • Double Write
  • Undo Log
  • Redo Log
  • MVCC
  • 崩溃恢复
  • 两阶段提交
  • 后台线程
  • WAL 技术
  • 脏页
  • checkpoint
  • LRU 链表
  • flush 策略
  • 自适应哈希索引
  • InnoDB 为什么使用 B+ 树
  • InnoDB 为什么推荐自增主键

2.3 MyISAM

  • 表级锁
  • 不支持事务
  • 不支持外键
  • 查询速度快
  • count(*) 优势
  • 崩溃恢复差
  • 索引和数据分离

2.4 InnoDB 与 MyISAM 区别

  • 锁机制
  • 事务支持
  • 外键支持
  • 崩溃恢复
  • 索引结构
  • count(*) 性能
  • 使用场景

3. 索引

3.1 索引基础

  • 什么是索引
  • 索引为什么快
  • 磁盘 IO
  • 局部性原理
  • B 树
  • B+ 树
  • Hash 索引
  • 红黑树
  • 二叉树
  • B+ 树和 B 树区别
  • 为什么不用红黑树
  • 为什么不用 Hash

3.2 索引分类

按功能

  • 主键索引
  • 唯一索引
  • 普通索引
  • 联合索引
  • 全文索引

按数据结构

  • B+Tree
  • Hash
  • RTree

按物理存储

  • 聚簇索引
  • 二级索引

3.3 联合索引

  • 最左前缀原则
  • 索引下推
  • 联合索引失效场景
  • 联合索引顺序设计
  • 覆盖索引
  • 回表
  • 索引排序
  • 索引分页

3.4 索引失效

  • 使用函数
  • 隐式类型转换
  • like '%xx'
  • 范围查询后失效
  • or 导致失效
  • != 不走索引
  • not in
  • is not null
  • 数据分布问题
  • 索引选择性低
  • 联合索引中断

3.5 索引优化

  • 高区分度字段建索引
  • 联合索引代替多个单列索引
  • 避免冗余索引
  • 覆盖索引优化
  • 前缀索引
  • 延迟关联
  • 避免回表
  • 避免 select *
  • 分页优化
  • 深分页优化
  • count 优化
  • order by 优化
  • group by 优化

3.6 explain 与索引

  • type=all
  • type=index
  • type=range
  • type=ref
  • type=eq_ref
  • type=const
  • rows 分析
  • key_len 分析
  • extra 分析

4. 事务

4.1 事务基础

  • ACID
  • 原子性
  • 一致性
  • 隔离性
  • 持久性
  • 事务生命周期
  • 自动提交机制

4.2 并发问题

  • 脏读
  • 不可重复读
  • 幻读
  • 丢失更新

4.3 隔离级别

  • Read Uncommitted
  • Read Committed
  • Repeatable Read
  • Serializable
  • MySQL 默认隔离级别
  • 不同隔离级别解决的问题

4.4 MVCC

  • ReadView
  • undo log
  • 版本链
  • trx_id
  • roll_pointer
  • 可见性算法
  • 当前读
  • 快照读
  • RC 与 RR 的 ReadView 区别
  • MVCC 实现原理
  • 为什么 RR 可以解决不可重复读

4.5 事务日志

  • redo log
  • undo log
  • binlog
  • 两阶段提交
  • 崩溃恢复
  • redo log buffer
  • redo log 刷盘时机
  • binlog 格式
  • statement
  • row
  • mixed

4.6 分布式事务

  • XA
  • 2PC
  • 3PC
  • TCC
  • SAGA
  • Seata
  • 柔性事务
  • 最终一致性

5. 锁

5.1 锁分类

按粒度

  • 行锁
  • 表锁
  • 页锁

按模式

  • 共享锁
  • 排他锁
  • 意向锁

按算法

  • Record Lock
  • Gap Lock
  • Next-Key Lock

5.2 InnoDB 锁机制

  • 行锁实现
  • 锁是加在索引上还是数据上
  • Next-Key Lock 原理
  • Gap Lock 解决幻读
  • RR 为什么能解决幻读
  • 唯一索引加锁
  • 非唯一索引加锁
  • 主键锁
  • 二级索引锁

5.3 死锁

  • 死锁形成原因
  • 死锁案例
  • 死锁检测
  • 死锁避免
  • 锁顺序一致
  • 减少事务粒度
  • 使用索引避免锁升级

5.4 乐观锁与悲观锁

  • version 字段
  • CAS
  • select for update
  • 使用场景

6. 日志系统

6.1 redo log

  • WAL 原理
  • redo log buffer
  • 刷盘策略
  • checkpoint
  • 循环写
  • 崩溃恢复
  • 为什么比直接刷盘快

6.2 undo log

  • 回滚实现
  • MVCC 支持
  • 版本链
  • purge 线程

6.3 binlog

  • 主从复制
  • 数据恢复
  • statement 模式
  • row 模式
  • mixed 模式
  • binlog cache
  • sync_binlog

6.4 relay log

  • 从库同步
  • IO 线程
  • SQL 线程

6.5 慢查询日志

  • slow query log
  • long_query_time
  • 慢 SQL 排查

6.6 error log

  • 错误日志
  • 崩溃日志

6.7 general log

  • 通用日志

7. SQL 优化

7.1 SQL 调优思路

  • 定位慢 SQL
  • explain 分析
  • SQL 重写
  • 索引优化
  • 表结构优化
  • 参数优化

7.2 查询优化

  • 避免 select *
  • 小表驱动大表
  • 避免函数操作
  • 避免隐式转换
  • 使用覆盖索引
  • 减少回表
  • 分页优化
  • 深分页优化
  • limit 优化
  • in 与 exists
  • count(*) 优化
  • count(1) 与 count(*)

7.3 Join 优化

  • Nested Loop Join
  • Block Nested Loop
  • Hash Join
  • join buffer
  • join 顺序优化
  • 小结果集驱动大结果集

7.4 排序优化

  • filesort
  • 双路排序
  • 单路排序
  • 利用索引排序

7.5 group by 优化

  • using temporary
  • using filesort
  • 索引分组

7.6 子查询优化

  • exists
  • in
  • 派生表
  • 临时表

7.7 分页优化

  • limit offset 问题
  • 覆盖索引分页
  • 子查询分页
  • 游标分页

8. 高性能与架构

8.1 主从复制

  • 主从原理
  • binlog 同步
  • IO 线程
  • SQL 线程
  • relay log
  • 半同步复制
  • GTID
  • 延迟复制
  • 主从延迟
  • 主从一致性

8.2 读写分离

  • 中间件
  • MyCat
  • ShardingSphere
  • Atlas
  • ProxySQL
  • 数据一致性问题

8.3 分库分表

垂直拆分

  • 按业务拆分
  • 微服务拆分

水平拆分

  • range
  • hash
  • 一致性 hash
  • 分片键设计
  • 数据迁移
  • 全局 ID
  • 雪花算法
  • 分布式事务
  • 跨库 join
  • 分页问题

8.4 缓存

  • Redis + MySQL
  • 缓存穿透
  • 缓存击穿
  • 缓存雪崩
  • 双写一致性
  • 延迟双删
  • Canal
  • MQ 最终一致性

8.5 高可用

  • MHA
  • MMM
  • Orchestrator
  • Keepalived
  • VIP
  • Proxy
  • 故障转移

8.6 数据备份与恢复

  • mysqldump
  • xtrabackup
  • 冷备份
  • 热备份
  • binlog 恢复
  • 时间点恢复

9. MySQL 调优

9.1 配置参数

  • innodb_buffer_pool_size
  • innodb_log_file_size
  • innodb_flush_log_at_trx_commit
  • sync_binlog
  • max_connections
  • thread_cache_size
  • sort_buffer_size
  • join_buffer_size

9.2 Buffer Pool

  • 命中率
  • 预读
  • LRU
  • free list
  • flush list

9.3 CPU 调优

  • SQL 优化
  • 减少锁竞争
  • 并发控制

9.4 IO 调优

  • SSD
  • RAID
  • 顺序 IO
  • 随机 IO

9.5 表设计优化

  • 反范式
  • 冗余字段
  • 大字段拆分
  • 冷热数据分离

10. MySQL 监控

10.1 常见监控指标

  • QPS
  • TPS
  • 活跃连接数
  • 慢查询
  • Buffer Pool 命中率
  • 锁等待
  • 主从延迟

10.2 监控工具

  • Prometheus
  • Grafana
  • Percona Toolkit
  • pt-query-digest
  • Zabbix
  • PMM

10.3 慢 SQL 排查

  • explain
  • profile
  • trace
  • performance_schema

11. 面试高频问题

索引

  • 为什么 MySQL 用 B+ 树
  • 聚簇索引和非聚簇索引区别
  • 回表是什么
  • 覆盖索引是什么
  • 最左前缀原则
  • 索引下推
  • 索引失效场景

事务

  • ACID 是什么
  • MVCC 原理
  • RR 如何解决幻读
  • ReadView 原理
  • undo log 和 redo log 区别
  • 两阶段提交为什么需要

  • 行锁和表锁区别
  • Gap Lock 是什么
  • Next-Key Lock 是什么
  • 死锁如何解决

日志

  • redo log 和 binlog 区别
  • binlog 有哪些格式
  • 崩溃恢复原理

高性能

  • 主从复制原理
  • 分库分表如何做
  • 为什么会主从延迟
  • 如何设计高并发系统

12. MySQL 8.0 新特性

  • CTE
  • 窗口函数
  • JSON 支持增强
  • 隐藏索引
  • 原子 DDL
  • hash join
  • 降序索引
  • utf8mb4 默认支持
  • data dictionary
  • explain analyze

13. 实战场景

秒杀系统

  • 库存扣减
  • 超卖问题
  • 分布式锁
  • 乐观锁
  • Redis 预扣库存

用户系统

  • 手机号唯一
  • 登录日志
  • 分页优化

订单系统

  • 分库分表
  • 分布式事务
  • 最终一致性

电商系统

  • SKU 检索
  • 搜索优化
  • ES + MySQL

IM 系统

  • 消息存储
  • 顺序保证
  • 分表策略

14. DBA 方向

安全

  • 用户权限
  • SQL 注入
  • 数据脱敏
  • 审计日志

运维

  • 在线扩容
  • 在线 DDL
  • pt-online-schema-change
  • 数据迁移

故障处理

  • 主库宕机
  • 主从切换
  • binlog 恢复
  • 数据误删恢复

15. 源码与底层

InnoDB 页结构

  • File Header
  • Page Header
  • Infimum/Supremum
  • User Records
  • Page Directory

Buffer Pool

  • free list
  • flush list
  • LRU list

B+树实现

  • 页分裂
  • 页合并
  • 高度控制
  • 非叶子节点
  • 叶子节点双向链表

Redo Log 原理

  • mini transaction
  • WAL
  • checkpoint
  • log buffer

MVCC 底层

  • undo log
  • ReadView
  • trx_id
  • roll_pointer
  • 可见性判断

16. 推荐学习路线

第一阶段

  • SQL 基础
  • 数据类型
  • 增删改查
  • join
  • explain

第二阶段

  • 索引
  • B+树
  • SQL 优化
  • 慢 SQL

第三阶段

  • 事务
  • MVCC
  • 日志

第四阶段

  • 主从复制
  • 分库分表
  • 高并发
  • 高可用

第五阶段

  • MySQL 源码
  • InnoDB 底层
  • DBA 运维
  • 架构设计

17. 推荐书籍

  • 《高性能 MySQL》
  • 《MySQL 技术内幕:InnoDB 存储引擎》
  • 《MySQL 是怎样运行的》
  • 《MySQL 实战 45 讲》
  • 《数据库索引设计与优化》

18. 推荐工具

  • Navicat
  • DataGrip
  • MySQL Workbench
  • Percona Toolkit
  • pt-query-digest
  • mysqldump
  • xtrabackup

19. 推荐项目实践

  • 博客系统
  • 电商系统
  • 秒杀系统
  • IM 聊天系统
  • 订单系统
  • 用户中心
  • 支付系统
  • CMS 系统

20. 高频口诀

  • 最左前缀要遵守
  • 覆盖索引减少回表
  • 小表驱动大表
  • 能不用 select * 就别用
  • 联合索引优于多个单列索引
  • redo 保持持久性
  • undo 支持回滚和 MVCC
  • RR + Next-Key Lock 解决幻读
  • explain 是 SQL 调优第一步

AI

华东理工(211研)

可信软件与系统

软件测试
Python高级程序设计
高级软件工程(全英文)
计算机安全与密码学(全英文)
Python高级程序设计(全英文)

大数据分析与应用

大模型技术及其应用
区块链技术
大模型的原理与实践
医学影像分析与应用
现代计算机网络
区块链技术(全英文)
大模型的原理与实践(全英文)
医学影像分析与应用(全英文)
高级数据库技术(全英文)

大规模并行与演化计算

高性能计算
现代计算机系统结构
AI+高级嵌入式系统
高级嵌入式系统(全英文)

人工智能与机器学习

计算机视觉
高级图像处理与机器学习
现代语音处理技术
智能媒体计算
可视计算
深度学习原理及其应用
现代语音处理技术(全英文)
可视计算(全英文)

其他

人工智能原理与应用 算法理论 最优化方法 矩阵理论 学术英语(听说读写)

posted @ 2026-04-24 09:47  4加1等于9  阅读(10)  评论(0)    收藏  举报