前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何阅读 Redis 的源码

如何阅读 Redis 的源码

作者头像
一条coding
发布2022-05-17 08:00:34
6480
发布2022-05-17 08:00:34
举报
文章被收录于专栏:一条IT一条IT

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

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

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

源码下载

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

http://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.c

Redis 的动态字符串实现。

adlist.h 和 adlist.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 实现。

ziplist.h 和 ziplist.c

压缩列表(zip list)数据结构。

2.数据类型的实现

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

object.c

Redis 的对象(类型)系统实现。

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.c

Redis 的数据库通知功能实现代码。

rdb.h 和 rdb.c

Redis 的 RDB 持久化实现代码。

aof.c

Redis 的 AOF 持久化实现代码。

4.单机 Redis

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

ae.c ,以及任意一个 ae_*.c 文件(取决于你所使用的多路复用库)。

Redis 的事件处理器实现(基于 Reactor 模式)。

networking.c

Redis 的网络连接库,负责发送命令回复和接受命令请求, 同时也负责创建/销毁客户端, 以及通信协议分析等工作。

redis.h 和 redis.c 中和单机 Redis 服务器有关的部分。

单机 Redis 服务器的实现。

5.多机 Redis

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

replication.c

复制功能的实现代码。

sentinel.c

Redis Sentinel 的实现代码。

cluster.c

Redis 集群的实现代码。

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

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

记得点赞在看!下期见!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一条coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 源码下载
  • 源码的目录结构
  • 阅读顺序
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档