技术体系构建
技术学习骨架:
- 是什么
- 为什么
- 怎么实现
- 有什么问题
- 怎么优化
- 基础层
- 原理层
- 架构层
- 实战层
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+高级嵌入式系统
高级嵌入式系统(全英文)
人工智能与机器学习
计算机视觉
高级图像处理与机器学习
现代语音处理技术
智能媒体计算
可视计算
深度学习原理及其应用
现代语音处理技术(全英文)
可视计算(全英文)
其他
人工智能原理与应用 算法理论 最优化方法 矩阵理论 学术英语(听说读写)

浙公网安备 33010602011771号