我给你画一张清晰、面试级、能直接看懂的 Redis 底层架构图,用文字+结构框图形式,保证你一眼吃透。
Redis 整体底层架构图
┌─────────────────────────────────────────────────────────────┐
│ 客户端(Java/Go/Python/CLI) │
└───────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 网络通信层(Network Layer) │
│ ┌──────────────┐ ┌───────────────┐ ┌─────────────────┐ │
│ │ Socket 监听 │ │ IO多路复用 │ │ 命令解析&协议 │ │
│ │ (bind/listen)│→ │(epoll/kqueue) │→ │(RESP 协议解析) │ │
│ └──────────────┘ └───────────────┘ └─────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 事件处理器(单线程核心) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 单线程命令执行队列 │ │
│ │ (读/写/删除/过期/事务/Lua 全部串行执行) │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 内存数据核心层 │
│ ┌─────────────┐ ┌────────────┐ ┌─────────────────────┐ │
│ │ 字典 dict │ │ 数据结构 │ │ 过期策略 & LRU/LFU │ │
│ │(全局哈希表) │→ │(SDS/跳表/ │→ │ 主动淘汰 + 惰性删除│ │
│ └─────────────┘ │ quicklist)│ └─────────────────────┘ │
│ └────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 持久化模块 │
│ ┌───────────────┐ ┌───────────────────────┐ │
│ │ RDB 快照 │ │ AOF 日志 │ │
│ │(fork 子进程)│ │(写后日志/重写机制) │ │
│ └───────────────┘ └───────────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 高可用 & 集群模块 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │
│ │ 主从复制 │ │ 哨兵 │ │ Redis集群│ │ 事务/Lua │ │
│ │(replication)││(sentinel)││(cluster) ││(单线程原子) │ │
│ └──────────┘ └──────────┘ └──────────┘ └────────────┘ │
└─────────────────────────────────────────────────────────────┘
每层核心作用一句话吃透
-
网络层
IO多路复用(epoll)+ Reactor 模型,一个线程扛万级连接。
-
单线程事件循环
所有命令串行执行,无锁、无竞争、无上下文切换,这是 Redis 快的关键。
-
内存数据核心(灵魂)
- 全局
dict哈希表:O(1) 查找 - 底层优化数据结构:SDS、quicklist、跳表、ziplist
- 过期 key 处理:惰性删除 + 定期删除
- 全局
-
持久化
- RDB:全量快照,快
- AOF:增量日志,更安全
均异步/后台执行,不阻塞主线程查询。
-
高可用层
主从、哨兵、集群,解决单点、扩容、故障转移。
最核心的一张小图:Redis 单线程模型
客户端请求 → epoll 监听 → 放入队列 → 单线程依次执行 → 返回结果
没有并发,没有锁,纯内存操作 → 极快。