嗨,终于开始《redis源码解读》系列文章 – 开篇。大概说的下我的情况,工作中写的都是php代码,算是完全一个PHPer;但在大学学习编程的入门是 C语言,对C还算是喜欢。说来惭愧,工作中一直写的是php,入门的语言拿来荒废了,工龄越长,才越来体会到C的重要性。但还好,C还能看懂,顺便把心中积压已久的想法去执行下,一来可以练习查看源代码能力,还有希望可以给想深入学习redis源码的伙伴一些独特的帮助,或让想学习数据结构的同学有个很好的学习资料。
简单介绍下,我要如何来解读redis源码。我会进行源码的拆分,把它们可以独立出来的代码都一个一个剥离出来,然后来单独的运行测试与讲解它们。
如果你对redis的代码结构略知一二的话,你也许大概知道redis源码层次是挺分明的。根据资料,我们将redis做如下分解:
- 数据结构
- 内存编码数据结构
- 数据类型
- 数据库
- 客户端和服务器
- 多机功能
为什么这么进行划分的呢,请看 如何阅读 Redis 源码 这篇博文,你就能明白了。如果还想更加系统的了解 redis 实现原理,推荐看<<Redis设计与实现>>。下面是数据结构所包函的文件,及文件的内容:
- Redis 源码中, 各个数据结构的实现文件:
文件 | 内容 |
---|---|
sds.h 和 sds.c | Redis 的动态字符串实现 |
dict.h 和 dict.c | Redis 的字典实现 |
redis.h 中的 zskiplist 结构和 zskiplistNode 结构, 以及 t_zset.c 中所有以 zsl 开头的函数, 比如 zslCreate 、 zslInsert 、 zslDeleteNode ,等等 | Redis 的跳跃表实现 |
hyperloglog.c 中的 hllhdr 结构, 以及所有以 hll 开头的函数 | Redis 的 HyperLogLog 实现 |
在这,只罗列出数据结构相关的所有文件,想查看其余部分,请继续阅读 如何阅读 Redis 源码 这篇博文。数据结构是我们了解redis实现的第一步,通过剥离出它们,并让其单独运行起来,从而让我们有个比较真实的体会。
开篇博文,内容相对简短,待后续完善。我会在此文的后面罗列出此系列的文章目录。