Redis

Redis

参考 https://zeeech.github.io/categories/redis/

参考 https://github.com/3masterplus/book

参考 https://github.com/huangz1990/redis-3.0-annotated

参考 http://doc.redisfans.com/index.html

参考 http://www.calvinneo.com/tags/redis/

参考 https://blog.huangz.me/diary/2014/how-to-read-redis-source-code.html

链接 https://www.zhihu.com/question/28677076/answer/134193549
 
文件作用
adlist.c 、 adlist.h 双端链表数据结构的实现。
ae.c 、 ae.h 、 ae_epoll.c 、 ae_evport.c 、 ae_kqueue.c 、 ae_select.c 事件处理器,以及各个具体实现。
anet.c 、 anet.h Redis 的异步网络框架,内容主要为对 socket 库的包装。
aof.c AOF 功能的实现。
asciilogo.h 保存了 Redis 的 ASCII LOGO 。
bio.c 、 bio.h Redis 的后台 I/O 程序,用于将 I/O 操作放到子线程里面执行, 减少 I/O 操作对主线程的阻塞。
bitops.c 二进制位操作命令的实现文件。
blocked.c 用于实现 BLPOP 命令和 WAIT 命令的阻塞效果。
cluster.c 、 cluster.h Redis 的集群实现。
config.c 、 config.h Redis 的配置管理实现,负责读取并分析配置文件, 然后根据这些配置修改 Redis 服务器的各个选项。
crc16.c 、 crc64.c 、 crc64.h 计算 CRC 校验和。
db.c 数据库实现。
debug.c 调试实现。
dict.c 、 dict.h 字典数据结构的实现。
endianconv.c 、 endianconv.h 二进制的大端、小端转换函数。
fmacros.h 一些移植性方面的宏。
help.h utils/generate-command-help.rb 程序自动生成的命令帮助信息。
hyperloglog.c HyperLogLog 数据结构的实现。
intset.c 、 intset.h 整数集合数据结构的实现,用于优化 SET 类型。
lzf_c.c 、 lzf_d.c 、 lzf.h 、 lzfP.h Redis 对字符串和 RDB 文件进行压缩时使用的 LZF 压缩算法的实现。
Makefile 、 Makefile.dep 构建文件。
memtest.c 内存测试。
mkreleasehdr.sh 用于生成释出信息的脚本。
multi.c Redis 的事务实现。
networking.c Redis 的客户端网络操作库, 用于实现命令请求接收、发送命令回复等工作, 文件中的函数大多为 write 、 read 、 close 等函数的包装, 以及各种协议的分析和构建函数。
notify.c Redis 的数据库通知实现。
object.c Redis 的对象系统实现。
pqsort.c 、 pqsort.h 快速排序(QuickSort)算法的实现。
pubsub.c 发布与订阅功能的实现。
rand.c 、 rand.h 伪随机数生成器。
rdb.c 、 rdb.h RDB 持久化功能的实现。
redisassert.h Redis 自建的断言系统。
redis-benchmark.c Redis 的性能测试程序。
redis.c 负责服务器的启动、维护和关闭等事项。
redis-check-aof.c 、 redis-check-dump.c RDB 文件和 AOF 文件的合法性检查程序。
redis-cli.c Redis 客户端的实现。
redis.h Redis 的主要头文件,记录了 Redis 中的大部分数据结构, 包括服务器状态和客户端状态。
redis-trib.rb Redis 集群的管理程序。
release.c 、 release.h 记录和生成 Redis 的释出版本信息。
replication.c 复制功能的实现。
rio.c 、 rio.h Redis 对文件 I/O 函数的包装, 在普通 I/O 函数的基础上增加了显式缓存、以及计算校验和等功能。
scripting.c 脚本功能的实现。
sds.c 、 sds.h SDS 数据结构的实现,SDS 为 Redis 的默认字符串表示。
sentinel.c Redis Sentinel 的实现。
setproctitle.c 进程环境设置函数。
sha1.c 、 sha1.h SHA1 校验和计算函数。
slowlog.c 、 slowlog.h 慢查询功能的实现。
solarisfixes.h 针对 Solaris 系统的补丁。
sort.c SORT 命令的实现。
syncio.c 同步 I/O 操作。
testhelp.h 测试辅助宏。
t_hash.c 、 t_list.c 、 t_set.c 、 t_string.c 、 t_zset.c 定义了 Redis 的各种数据类型,以及这些数据类型的命令。
util.c 、 util.h 各种辅助函数。
valgrind.sup valgrind 的suppression文件。
version.h 记录了 Redis 的版本号。
ziplist.c 、 ziplist.h ZIPLIST 数据结构的实现,用于优化 LIST 类型。
zipmap.c 、 zipmap.h ZIPMAP 数据结构的实现,在 Redis 2.6 以前用与优化 HASH 类型, Redis 2.6 开始已经废弃。
zmalloc.c 、 zmalloc.h 内存管理程序。

 

第一阶段

  • 阅读Redis的数据结构部分,基本位于如下文件中:内存分配 zmalloc.c和zmalloc.h
  • 动态字符串 sds.h和sds.c
  • 双端链表 adlist.c和adlist.h
  • 字典 dict.h和dict.c
  • 跳跃表 server.h文件里面关于zskiplist结构和zskiplistNode结构,以及t_zset.c中所有zsl开头的函数,比如 zslCreate、zslInsert、zslDeleteNode等等。
  • 基数统计 hyperloglog.c 中的 hllhdr 结构, 以及所有以 hll 开头的函数

第二阶段 熟悉Redis的内存编码结构

  • 整数集合数据结构 intset.h和intset.c
  • 压缩列表数据结构 ziplist.h和ziplist.c

第三阶段 熟悉Redis数据类型的实现

  • 对象系统 object.c
  • 字符串键 t_string.c
  • 列表建 t_list.c
  • 散列键 t_hash.c
  • 集合键 t_set.c
  • 有序集合键 t_zset.c中除 zsl 开头的函数之外的所有函数
  • HyperLogLog键 hyperloglog.c中所有以pf开头的函数

第四阶段 熟悉Redis数据库的实现

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

以及一些独立功能模块的实现

  • 发布和订阅 redis.h文件的pubsubPattern结构,以及pubsub.c文件
  • 事务 redis.h文件的multiState结构以及multiCmd结构,multi.c文件

第五阶段 熟悉客户端和服务器端的代码实现

  • 事件处理模块 ae.c/ae_epoll.c/ae_evport.c/ae_kqueue.c/ae_select.c
  • 网路链接库 anet.c和networking.c
  • 服务器端 redis.c
  • 客户端 redis-cli.c
  • 这个时候可以阅读下面的独立功能模块的代码实现
  • lua脚本 scripting.c
  • 慢查询 slowlog.c
  • 监视 monitor.c

第六阶段 这一阶段主要是熟悉Redis多机部分的代码实现

  • 复制功能 replication.c
  • Redis Sentinel sentinel.c
  • 集群 cluster.c

其他代码文件介绍

关于测试方面的文件有:

  • memtest.c 内存检测
  • redis_benchmark.c 用于redis性能测试的实现。
  • redis_check_aof.c 用于更新日志检查的实现。
  • redis_check_dump.c 用于本地数据库检查的实现。
  • testhelp.c 一个C风格的小型测试框架。

一些工具类的文件如下:

  • bitops.c GETBIT、SETBIT 等二进制位操作命令的实现
  • debug.c 用于调试时使用
  • endianconv.c 高低位转换,不同系统,高低位顺序不同
  • help.h 辅助于命令的提示信息
  • lzf_c.c 压缩算法系列
  • lzf_d.c 压缩算法系列
  • rand.c 用于产生随机数
  • release.c 用于发布时使用
  • sha1.c sha加密算法的实现
  • util.c 通用工具方法
  • crc64.c 循环冗余校验
  • sort.c SORT命令的实现
  • 一些封装类的代码实现:
  • bio.c background I/O的意思,开启后台线程用的
  • latency.c 延迟类
  • migrate.c 命令迁移类,包括命令的还原迁移等
  • pqsort.c 排序算法类
  • rio.c redis定义的一个I/O类
  • syncio.c 用于同步Socket和文件I/O操作

 

================ End

 

posted @   lsgxeva  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2018-01-29 端口相关知识学习笔记
点击右上角即可分享
微信分享提示