Redis源码分析(零)学习路径笔记

文章目录

    • 第一阶段
    • 第二阶段 熟悉Redis的内存编码结构
    • 第三阶段 熟悉Redis数据类型的实现
    • 第四阶段 熟悉Redis数据库的实现
    • 第五阶段 熟悉客户端和服务器端的代码实现
    • 第六阶段 这一阶段主要是熟悉Redis多机部分的代码实现
    • 关于测试方面的文件有
    • 一些工具类的文件如下
    • SORT命令的实现一些封装类的代码实现

第一阶段

阅读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开头的函数
基数统计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 Sentinelsentinel.c
集群cluster.c

关于测试方面的文件有

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

一些工具类的文件如下

内容文件名
bitops.cGETBIT、SETBIT 等二进制位操作命令的实现
debug.c用于调试时使用
endianconv.c高低位转换,不同系统,高低位顺序不同
help.h辅助于命令的提示信息
lzf_c.c压缩算法系列
lzf_d.c压缩算法系列
rand.c用于产生随机数
release.c用于发布时使用
sha1.csha加密算法的实现
util.c通用工具方法
crc64.c循环冗余校验
sort.c排序

SORT命令的实现一些封装类的代码实现

内容文件名
bio.cbackground I/O的意思,开启后台线程用的
latency.c延迟类
migrate.c命令迁移类,包括命令的还原迁移等
pqsort.c排序算法类
rio.credis定义的一个I/O类
syncio.c用于同步Socket和文件I/O操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Effective C++学习第十二天

条款47:请使用traits classes表现类型信息STL有五类迭代器分类,input迭代器(只读,一次,向前)、output迭代器(可写,一次,向前)、forward迭代器(读/…

Redis源码分析(一)redis.c //redis-server.c

Redis源码分析(一)redis.c //redis-server.c 入口函数 int main() 4450 int main(int argc, char **argv) {4451 initServerConfig();4452 if (argc 2) {4453 ResetServerSaveParams();4454 loadServerConfig(argv[1]);4455 …

Linux 学习

1.linux文本命令行语言环境设置命令 查看当前语言环境: echo ¥LANG 修改: LANG选择的语言环境’ 引申:https://blog.csdn.net/huoyunshen88/article/details/41113633 2.linux中的硬链接和软连接 linux中文件的储存方式&#xf…

vivo C/C++工程师视频面试总结 20180802

1.自我介绍:有点儿紧张了,直接把自己简历上的一些信息信息说了一遍,说完之后在介绍了一下自己的平时的爱好和兴趣,感觉面试官没有理我,直接进入下一环节了。 2.项目详情:主要是自己最近的一个项目和自己负…

Redis源码分析(二)redis-cli.c

文章目录1. int main()2. parseOptions(int argc, char **argv) 进行ip和port的改变3. lookupCommand(char *name) 查找命令,判断命令合法3.2 strcasecmp(name,cmdTable[j].name)3.1 redisCommand cmdTable[]4. cliSendCommand(int argc, char **argv)4.1 cliConnec…

C语言中有bool变量吗?

1.C/C中定义的数据类型: C语言中定义了6种基本数据类型:short,int,long,float,double,char 4种构造类型:数组,结构体(struct),共用类型(union),枚举类型(enum) 指针类型和空类型 C语…

redis源码剖析(三)——基础数据结构

文章目录SDS链表字典这篇文章关于 Redis 的基础数据:SDS SDS (Simple Dynamic String)是 Redis 最基础的数据结构。直译过来就是”简单的动态字符串“。Redis 自己实现了一个动态的字符串,而不是直接使用了 C 语言中的字符串。 sds 的数据结…

C++迭代器使用错误总结

指针和迭代器的区别: 迭代器: (1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*, --等封装了指针,是一…

redis源码剖析(四)跳表

文章目录整数集合跳跃表压缩列表总结整数集合 当一个集合只包含整数,且这个集合的元素不多的时候,Redis 就会使用整数集合 intset 。首先看 intset 的数据结构: typedef struct intset {// 编码方式uint32_t encoding;// 集合包含的元素数量…

vivo C/C++工程师 HR视频面试问题总结20180807

一开始没想到这次视频面是HR面试,还以为是技术面试,毕竟上次面试的时候技术问题问的相对比较少,所以面试准备方向有点儿错了,不过还是总结一下具体问题。 1)自我介绍:吸取了上次自我介绍的经验,…

在Redis客户端设置连接密码 并演示密码登录

我们先连接到Redis服务 然后 我们要输入 CONFIG SET requirepass “新密码” 例如 CONFIG SET requirepass "A15167"这样 密码就被设置成立 A15167 我们 输入 AUTH 密码 例如 AUTH A15167这里 返回OK说明成功了 然后 我们退出在登录就真的需要 redis-cli -h IP地…

redis源码剖析(五)—— 字符串,列表,哈希,集合,有序集合

文章目录对象REDIS_STRING (字符串)REDIS_LIST 列表REDIS_SET (集合)REDIS_ZSET (有序集合)REDIS_HASH (hash表)int refcount(引用计数器)unsigned lru:REDIS_LRU_BITS对象 对于 Re…

函数sscanf小结

1.sscanf用于处理固定格式的字符串&#xff0c;包含在头文件<cstdio>中&#xff0c;函数原型为&#xff1a; int sscanf(const char *buffer,const char*format,[]argument ]...); 其中:buffer代表着要存储的数据&#xff0c;format 代表格式控制字符串&#xff0c;arg…

redis源码剖析(六)—— Redis 数据库、键过期的实现

文章目录数据库的实现数据库读写操作键的过期实现数据库的实现 我们先看代码 server.h/redisServer struct redisServer{...//保存 db 的数组redisDb *db;//db 的数量int dbnum;... }再看redisDb的代码&#xff1a; typedef struct redisDb {dict *dict; /*…

多益网络 视频面试面试总结20180816

1.首先是自我介绍&#xff1a;因为等了半个小时&#xff0c;所以有点儿紧张&#xff0c;只说了一下自己的学校&#xff0c;爱好和兴趣&#xff1b; 2.介绍了一个自己的最成功的项目&#xff1a;我介绍了一个关于GPS导航的项目&#xff0c;介绍了项目的内容和项目的一些工作&am…

redis源码剖析(七)—— Redis 数据结构dict.c

文章目录dict.hdict.cdict.h //定义错误相关的码 #define DICT_OK 0 #define DICT_ERR 1//实际存放数据的地方 typedef struct dictEntry {void *key;void *val;struct dictEntry *next; } dictEntry;//哈希表的定义 typedef struct dict {//指向实际的哈希表记录(用数组开链的…

简述linux中动态库和静态库的制作调用流程

假设现在有这些文件&#xff1a;sub.c add.c div.c mul.c mainc head.h&#xff08;前4个.C文件的头文件&#xff09; 1.静态库制作流程 gcc -c sub.c add.c div.c mul.c -->生成 .o目标文件文件 ar rcs libmycal.a *.o …

redis源码剖析(八)—— 当你启动Redis的时候,Redis做了什么

文章目录启动过程初始化server结构体main函数会调用initServer函数初始化服务器状态载入持久化文件&#xff0c;还原数据库开始监听事件流程图启动过程 初始化server结构体从配置文件夹在加载参数初始化服务器载入持久化文件开始监听事件 初始化server结构体 服务器的运行ID…

linux中错误总结归纳

1.使用gcc编译C文件&#xff0c;C文件在for循环语句中出现变量定义 编译器提示错误&#xff1a;“for”loop initial declarations are only allowed in C99 mode. note:use option -stdc99or-stdgnu99 to compile; 原因&#xff1a;gcc的标准是基于c89的&#xff0c;c89不能在…

redis源码剖析(十一)—— Redis字符串相关函数实现

文章目录初始化字符串字符串基本操作字符串拼接操作other获取指定范围里的字符串将字符串中的所有字符均转为小写的形式将字符串中所有字符均转为大写的形式字符串比较other#define SDS_ABORT_ON_OOM#include "sds.h" #include <stdio.h> #include <stdlib.…