Build Your Own Redis with C/C++ 学习(一)

Build 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++ 作为本项目的主要语言,原因如下:

  1. 高性能要求:高性能软件需要对底层进行精细控制,这正是 C/C++ 的强项。
  2. 强制学习:C 语言没有内置的高级数据结构或网络库,这迫使你必须亲手去实现它们,从而真正学会。
  3. 通用性:本项目使用纯 C 语言(包含极少量可选的 C++ 特性),即使你没有 C/C++ 经验也能读懂。

其他语言的对比分析:

  • Go:虽然适合处理字节操作,但它内置的网络库太过成熟且完善,导致你无法通过编写代码学到网络编程底层的完整细节。
  • Python:对于学习“哈希表”等数据结构来说太高级了(因为它是内置的)。但在生产环境中,常用于作为“胶水”调用 C 模块。不过,Python 对 Socket 的封装较薄,仍然适合用来学习网络编程部分。
  • JavaScript:与 Python 一样高级,但它隐藏了“事件循环(Event Loop)”机制并内置了网络功能。要真正理解 JS 或 Go 的底层机制,你往往需要跳出这两门语言本身。

5. 为什么你现在应该开始写一个 Redis?

  1. 对抗 AI 时代的贬值:随着 AI 工具让通用软件开发变得容易,掌握技术性更强、更系统化的底层开发能力,能为你提供新的职业护城河。
  2. 最佳实战练习:特别是对于没有实际项目经验的学生,这是一个含金量极高的练习。
  3. 面试神器:这是对计算机基础知识最快速、最深刻的复习。
  4. 智力乐趣:单纯地弄清楚“东西是怎么工作的”,本身就是一种极大的思维乐趣。

6. 关于本书/本项目

  • 循序渐进:每一章都是一个增量步骤,并附带完整的源代码。
  • 精简核心:最终的成品代码仅约 1200 行
  • 重原理,轻细节:我们略过了枯燥的细节,专注于核心原理。为了更好地演示某些主题,部分实现方式与真实的 Redis 不同,因此它不是一个 100% 兼容的克隆版,而是一个完美的教学版