第1章 内存数据结构服务器 章节摘要:本章跟着一个问题走——当你执行一条 SET 命令时,机器里到底发生了什么。答案会带出 Redis 的真实身份:一个用 C 写的、跑在内存里的数据结构服务器。理解这个身份,后面的跳表、listpack、槽位分布才有落脚点。 一条主线 假设你刚接手一个电商项目,首页接口 800 毫秒才能返回,数据库慢查询里全是商品分类表。同事建议"加个 Redis 缓存"。本章就从装一个 Redis 开始,一路追到一条命令在网络上如何编码、在服务端如何被单线程处理。这条"一条命令的旅程"是全书的主线起点。 沿途站点 1.1 Redis 是什么:先把身份搞对——它不是"更快的 MySQL",而是把字符串、哈希表、跳表等结构直接暴露给你的服务进程。 1.
章节摘要:本章跟着一个问题走——当你执行一条 SET 命令时,机器里到底发生了什么。答案会带出 Redis 的真实身份:一个用 C 写的、跑在内存里的数据结构服务器。理解这个身份,后面的跳表、listpack、槽位分布才有落脚点。
假设你刚接手一个电商项目,首页接口 800 毫秒才能返回,数据库慢查询里全是商品分类表。同事建议"加个 Redis 缓存"。本章就从装一个 Redis 开始,一路追到一条命令在网络上如何编码、在服务端如何被单线程处理。这条"一条命令的旅程"是全书的主线起点。
一条命令从客户端到落盘的完整旅程如下:
注意图里的分工:命令执行永远在单个线程里,但读写盘、关连接这些慢活交给了后台线程——这是很多人对"Redis 单线程"的第一处误解。
| 流传的说法 | 实际情况 | 哪节讲透 |
|---|---|---|
| Redis 单线程,CPU 肯定是瓶颈 | 瓶颈多在内存容量与网络带宽;CPU 高先查慢命令与大键 | 1.2 |
| 装好就能上线,默认配置够用 | 默认无密码、无内存上限,公网几十分钟内就会被扫到 | 1.2 |
| 客户端库是黑盒,坏了只能换库 | 客户端拼的是可读的文本协议,一条命令能手写、能重放、能抓包 | 1.3 |
误解的共同来源是把 Redis 当成"一个装在服务器上的软件",而不是"一个暴露数据结构的服务"。前者只需要会启动与会调用,后者要求你理解它的执行模型——这正是本章要建立的心智。
本章的认知拐点在 1.2:单线程不是性能缺陷,而是数据结构服务的护城河。因为单线程,所有结构操作天然无锁;因为内存加好的结构,单线程也够快。想明白这一点,后面第 5 章讲"一条慢命令阻塞一切"、第 8 章讲"大 Key 危害"时,你会觉得理所当然。
对照检查,以下知识点应该做到不查资料就能回答:
这些点会直接被第 8 章的排查路线复用:报"连接超时"先想事件循环与阻塞命令,报"命令不支持"先查版本号。地基打得牢,后面的楼层才不晃。
清单里每一项都能在对应小节找到实验佐证:版本与角色看 1.1 的体检四连,线程边界看 1.2 的进程线程验证,报文格式看 1.3 的手写客户端。知识点不是背诵条目,是能亲手复现的操作。如果你的团队正在评审要不要引入 Redis,前一张误解表可以直接放进评审材料——三个误解对应三类最贵的返工:压测方向错了、上线即裸奔、故障时无从下手。
主线推进到"命令进了内存之后"。第 2 章打开第一个键:一个字符串在 Redis 内存里根本不是 C 字符串,而是 SDS——旅程进入结构内部。