Build Your Own Redis with C/C++ 学习(一)
Build Your Own Redis with C/C++ 学习(一)
kikockBuild Your Own Redis with C/C++
这本书是关于什么的?
介绍如何使用 C 语言和 C++ 语言 从零开始编写 Redis 服务器,学习如何构建实际应用软件。
1. 核心理念:为什么要造轮子?
“我无法创造的东西,我就无法理解。” —— 理查德·费曼
在编程领域,“创造”与“理解”有着不同的层次。
- 浅层的创造:将各种现成的库(Library)拼凑在一起。
- 深层的创造:构建更底层的系统,触达更根本的原理。
我们的目标并非为了重新发明轮子,而是为了磨练基本功。掌握这些底层知识将使你在职业生涯中脱颖而出:你将能做出更明智的技术决策,具备更强的调试能力,并拥有更广阔的职业选择。
2. 这个项目能教会你什么?
如果你能构建一个 Redis 服务器,你几乎就能构建任何软件。因为这个过程将深刻训练两项软件工程的基本技能:
🛠 技能一:网络编程 (Network Programming)
编程的进阶是多机编程。
当你掌握了 Redis 的构建原理,你就理解了 HTTP 服务器、RPC(远程过程调用)、数据库以及分布式系统背后的通用逻辑。
🧩 技能二:数据结构 (Data Structures)
常有人误以为数据结构只在 LeetCode 刷题时有用。Redis 是对这种观点的最强反击。
- Redis 本质上是一个数据结构服务器。
- 基础数据结构在实际工程中有大量应用,但前提是你必须有足够的知识储备去驾驭它们。
3. 什么是 Redis?
- 定义:Redis 是最流行的内存键值(Key-Value)存储系统。
- 用途:主要用于缓存。因为没有任何存储介质比内存更快。在高并发场景下,缓存是扩展系统最简单、最不可或缺的方式(它可以挡在缓慢的数据库查询前面)。
- 本质:一个运行在网络上的
map<string, string>。 - 特色:在 Redis 中,“值(Value)”不仅可以是字符串,还可以是 哈希表 (Hash)、列表 (List) 或 **有序集合 (Sorted Set)**。这种对复杂数据结构的支持,使其能够胜任排行榜、分页等复杂业务场景。
4. 技术选型:为什么选择 C/C++?
虽然 Redis 的初代原型是用 TCL 脚本写的,但其最终的高性能版本是用 C 语言编写的。
我们选择 C/C++ 作为本项目的主要语言,原因如下:
- 高性能要求:高性能软件需要对底层进行精细控制,这正是 C/C++ 的强项。
- 强制学习:C 语言没有内置的高级数据结构或网络库,这迫使你必须亲手去实现它们,从而真正学会。
- 通用性:本项目使用纯 C 语言(包含极少量可选的 C++ 特性),即使你没有 C/C++ 经验也能读懂。
其他语言的对比分析:
- Go:虽然适合处理字节操作,但它内置的网络库太过成熟且完善,导致你无法通过编写代码学到网络编程底层的完整细节。
- Python:对于学习“哈希表”等数据结构来说太高级了(因为它是内置的)。但在生产环境中,常用于作为“胶水”调用 C 模块。不过,Python 对 Socket 的封装较薄,仍然适合用来学习网络编程部分。
- JavaScript:与 Python 一样高级,但它隐藏了“事件循环(Event Loop)”机制并内置了网络功能。要真正理解 JS 或 Go 的底层机制,你往往需要跳出这两门语言本身。
5. 为什么你现在应该开始写一个 Redis?
- 对抗 AI 时代的贬值:随着 AI 工具让通用软件开发变得容易,掌握技术性更强、更系统化的底层开发能力,能为你提供新的职业护城河。
- 最佳实战练习:特别是对于没有实际项目经验的学生,这是一个含金量极高的练习。
- 面试神器:这是对计算机基础知识最快速、最深刻的复习。
- 智力乐趣:单纯地弄清楚“东西是怎么工作的”,本身就是一种极大的思维乐趣。
6. 关于本书/本项目
- 循序渐进:每一章都是一个增量步骤,并附带完整的源代码。
- 精简核心:最终的成品代码仅约 1200 行。
- 重原理,轻细节:我们略过了枯燥的细节,专注于核心原理。为了更好地演示某些主题,部分实现方式与真实的 Redis 不同,因此它不是一个 100% 兼容的克隆版,而是一个完美的教学版。


