第1章 内存数据结构服务器


文档摘要

第1章 内存数据结构服务器 章节摘要:本章跟着一个问题走——当你执行一条 SET 命令时,机器里到底发生了什么。答案会带出 Redis 的真实身份:一个用 C 写的、跑在内存里的数据结构服务器。理解这个身份,后面的跳表、listpack、槽位分布才有落脚点。 一条主线 假设你刚接手一个电商项目,首页接口 800 毫秒才能返回,数据库慢查询里全是商品分类表。同事建议"加个 Redis 缓存"。本章就从装一个 Redis 开始,一路追到一条命令在网络上如何编码、在服务端如何被单线程处理。这条"一条命令的旅程"是全书的主线起点。 沿途站点 1.1 Redis 是什么:先把身份搞对——它不是"更快的 MySQL",而是把字符串、哈希表、跳表等结构直接暴露给你的服务进程。 1.

第1章 内存数据结构服务器

章节摘要:本章跟着一个问题走——当你执行一条 SET 命令时,机器里到底发生了什么。答案会带出 Redis 的真实身份:一个用 C 写的、跑在内存里的数据结构服务器。理解这个身份,后面的跳表、listpack、槽位分布才有落脚点。

一条主线

假设你刚接手一个电商项目,首页接口 800 毫秒才能返回,数据库慢查询里全是商品分类表。同事建议"加个 Redis 缓存"。本章就从装一个 Redis 开始,一路追到一条命令在网络上如何编码、在服务端如何被单线程处理。这条"一条命令的旅程"是全书的主线起点。

沿途站点

  • 1.1 Redis 是什么:先把身份搞对——它不是"更快的 MySQL",而是把字符串、哈希表、跳表等结构直接暴露给你的服务进程。
  • 1.2 安装配置与单线程模型:动手把它跑起来,同时看清"单线程"到底单在哪里,为什么这反而快。
  • 1.3 客户端与 RESP 协议:命令在网络上是文本协议,读懂协议你才能理解 pipeline、慢查询这些后续话题。

一条命令从客户端到落盘的完整旅程如下:

注意图里的分工:命令执行永远在单个线程里,但读写盘、关连接这些慢活交给了后台线程——这是很多人对"Redis 单线程"的第一处误解。

三处常见误解,先拆为敬

流传的说法 实际情况 哪节讲透
Redis 单线程,CPU 肯定是瓶颈 瓶颈多在内存容量与网络带宽;CPU 高先查慢命令与大键 1.2
装好就能上线,默认配置够用 默认无密码、无内存上限,公网几十分钟内就会被扫到 1.2
客户端库是黑盒,坏了只能换库 客户端拼的是可读的文本协议,一条命令能手写、能重放、能抓包 1.3

误解的共同来源是把 Redis 当成"一个装在服务器上的软件",而不是"一个暴露数据结构的服务"。前者只需要会启动与会调用,后者要求你理解它的执行模型——这正是本章要建立的心智。

拐点与结论

本章的认知拐点在 1.2:单线程不是性能缺陷,而是数据结构服务的护城河。因为单线程,所有结构操作天然无锁;因为内存加好的结构,单线程也够快。想明白这一点,后面第 5 章讲"一条慢命令阻塞一切"、第 8 章讲"大 Key 危害"时,你会觉得理所当然。

本章知识点清单

对照检查,以下知识点应该做到不查资料就能回答:

  • 说出 Redis 与 Memcached 的本质差异在"值有没有结构",并能举一个结构化场景反证
  • 划出"单线程"的边界:命令执行器单线程,IO 读写、关闭文件、删除大键各有后台线程
  • 解释 epoll 事件循环为什么让一万条空闲连接几乎不占 CPU
  • 写出一条 SET 命令的完整 RESP 报文,标注每个字节段的含义
  • 说明 KEYS 为什么被禁用、SCAN 的游标语义与它做出的保证和妥协
  • 列出生产必改的参数并说出每一项防的是什么事故

这些点会直接被第 8 章的排查路线复用:报"连接超时"先想事件循环与阻塞命令,报"命令不支持"先查版本号。地基打得牢,后面的楼层才不晃。

清单里每一项都能在对应小节找到实验佐证:版本与角色看 1.1 的体检四连,线程边界看 1.2 的进程线程验证,报文格式看 1.3 的手写客户端。知识点不是背诵条目,是能亲手复现的操作。如果你的团队正在评审要不要引入 Redis,前一张误解表可以直接放进评审材料——三个误解对应三类最贵的返工:压测方向错了、上线即裸奔、故障时无从下手。

读完你应该

  1. 能用一句话向同事解释 Redis 与关系型数据库的本质区别
  2. 独立完成 Redis 的下载、编译、启动,并改掉端口和密码
  3. 说清哪些工作在主线程、哪些在后台线程
  4. 用 redis-cli 发命令,并看懂一条 RESP 报文的格式
  5. 理解为什么严禁在生产使用 KEYS 这类命令

下一章的接力

主线推进到"命令进了内存之后"。第 2 章打开第一个键:一个字符串在 Redis 内存里根本不是 C 字符串,而是 SDS——旅程进入结构内部。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U