如何阅读 Redis 源码 您所在的位置:网站首页 redis源码有必要读吗 如何阅读 Redis 源码

如何阅读 Redis 源码

2023-03-21 12:36| 来源: 网络整理| 查看: 265

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。

哈喽,大家好,我是一条。

本来今天是要和大家聊 string 的具体实现的,又考虑到很多同学很能都没看过 Redis 的源码,所以先聊一下如何阅读 Redis 的源码。

主要包括源码下载、源码目录结构、源码阅读顺序的讲解。

源码下载

其实 Redis 的源码就在我们下载的安装文件里,可以到官网直接下载。

download.redis.io/releases/

版本的选择上可以不选择最新版的,因为老版本的功能比较少,看起来更简单,推荐 2.0-3.0 之间选择。

下载到本地之后需要选择一个编辑器打开,因为我们并不需要 debug 运行,所以推荐轻量的代码编辑器 Sublime Text ,如果平时有使用 VSCode 也是可以的,如果想使用专业的 C 语言编译器,也可以尝试 JetBrains 的 C/C++ 工具 clion。

源码的目录结构

用编辑器打开之后,先了解一下代码的结构,我们主要关注是这几个文件:

其中 .conf 是配置文件, src 目录下就是我们要看的源码文件,通过文件名字大致就可以推断出相关的内容,所以阅读起来也是非常方便。

阅读顺序

虽然整个代码只有约 23000 行,但一个正确、高效的阅读顺序也会让我们事半功倍。

1.数据结构实现

首先 Redis 为了节省内存,自己定义了一些数据结构,比如 SDS(简单动态字符串)、压缩列表,也使用了我们接触过的经典数据结构,比如双端链表、跳表等。

这部分内容与其他部分耦合较少,不至于被劝退。同时又能体会 Redis 真是将内存利用到了极致。

包含的主要文件:

sds.h 和 sds.cRedis 的动态字符串实现。adlist.h 和 adlist.cRedis 的双端链表实现。dict.h 和 dict.cRedis 的字典实现。redis.h 中的 zskiplist 结构和 zskiplistNode 结构, 以及 t_zset.c 中所有以 zsl 开头的函数, 比如 zslCreate 、 zslInsert 、 zslDeleteNode ,等等。Redis 的跳跃表实现。hyperloglog.c 中的 hllhdr 结构, 以及所有以 hll 开头的函数。Redis 的 HyperLogLog 实现。ziplist.h 和 ziplist.c压缩列表(zip list)数据结构。

2.数据类型的实现

了解过 Redis 的数据结构之后,就可以分析我们常用的数据类型都是如何实现的了。

object.cRedis 的对象(类型)系统实现。t_string.c字符串键的实现。t_list.c列表键的实现。t_hash.c散列键的实现。t_set.c集合键的实现。t_zset.c 中除 zsl 开头的函数之外的所有函数。有序集合键的实现。hyperloglog.c 中所有以 pf 开头的函数。HyperLogLog 键的实现。

3.数据库相关

这部分就是我们常说数据持久化,rdb 和 aof 。也可以深入阅读 事务相关 LRU脚本等。

redis.h 文件中的 redisDb 结构, 以及 db.c 文件。Redis 的数据库实现。notify.cRedis 的数据库通知功能实现代码。rdb.h 和 rdb.cRedis 的 RDB 持久化实现代码。aof.cRedis 的 AOF 持久化实现代码。

4.单机 Redis

这部分包括单机 Redis 的客户端和服务端代码,比如事件处理、网络通信、命令交互等。

ae.c ,以及任意一个 ae_*.c 文件(取决于你所使用的多路复用库)。Redis 的事件处理器实现(基于 Reactor 模式)。networking.cRedis 的网络连接库,负责发送命令回复和接受命令请求, 同时也负责创建/销毁客户端, 以及通信协议分析等工作。redis.h 和 redis.c 中和单机 Redis 服务器有关的部分。单机 Redis 服务器的实现。

5.多机 Redis

这部分包括主从复制,哨兵监控、故障转移、多机集群等。

replication.c复制功能的实现代码。sentinel.cRedis Sentinel 的实现代码。cluster.cRedis 集群的实现代码。

以上就是 Redis 单机功能和多机功能的所有代码。

Redis 的设计非常巧妙和高效,认真读完一定会受益匪浅,同时也会对你阅读其它源码有帮助和启发。希望本文能给想深入学习 Redis ,阅读源码的同学带来帮助。

记得点赞关注!下期见!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有