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 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操作 |
Redis源码分析(零)学习路径笔记相关推荐
- 【 线性模型 Linear-Model 数学原理分析以及源码实现 深度学习 Pytorch笔记 B站刘二大人(1/10)】
线性模型 Linear-Model 数学原理分析以及源码实现 深度学习 Pytorch笔记 B站刘二大人(1/10) 数学原理分析 线性模型是我们在初级数学问题中所遇到的最普遍也是最多的一类问题 在线 ...
- 10年大厂程序员是如何高效学习使用redis的丨redis源码分析丨redis存储原理
10年大厂程序员是怎么学习使用redis的 1. redis存储原理分析 2. redis源码学习分享 3. redis跳表和B+树详细对比分析 视频讲解如下,点击观看: 10年大厂程序员是如何高效学 ...
- Redis源码分析:基础概念介绍与启动概述
Redis源码分析 基于Redis-5.0.4版本,进行基础的源码分析,主要就是分析一些平常使用过程中的内容.仅作为相关内容的学习记录,有关Redis源码学习阅读比较广泛的便是<Redis设计与 ...
- Redis源码分析(一)redis.c //redis-server.c
Redis源码分析(一)redis.c //redis-server.c 入口函数 int main() 4450 int main(int argc, char **argv) {4451 init ...
- 【 非线性回归 Logistics-Regression 模块实现与源码解读 深度学习 Pytorch笔记 B站刘二大人(5/10)】
非线性回归 Logistics-Regression 模块实现与源码解读 深度学习 Pytorch笔记 B站刘二大人(5/10) 数学推导 什么是logistics函数 在定义上Logistic函数或 ...
- redis源码分析 -- cs结构之服务器
服务器与客户端是如何交互的 redis客户端向服务器发送命令请求,服务器接收到客户端发送的命令请求之后,读取解析命令,并执行命令,同时将命令执行结果返回给客户端. 客户端与服务器交互的代码流程如下图所 ...
- Redis源码分析(一)--Redis结构解析
从今天起,本人将会展开对Redis源码的学习,Redis的代码规模比较小,非常适合学习,是一份非常不错的学习资料,数了一下大概100个文件左右的样子,用的是C语言写的.希望最终能把他啃完吧,C语言好久 ...
- Redis 源码分析之故障转移
在 Redis cluster 中故障转移是个很重要的功能,下面就从故障发现到故障转移整个流程做一下详细分析. 故障检测 PFAIL 标记 集群中每个节点都会定期向其他节点发送 PING 消息,以此来 ...
- Redis源码分析之PSYNC同步
Redis master-slave 同步源码分析 (1)slave 流程分析 (2)master 流程分析 Slave 分析 当Redis 启动后,会每隔 1s 调用 replicationCron ...
- Redis源码分析 —— 发布与订阅
前言 通过阅读Redis源码,配合GDB和抓包等调试手段,分析Redis发布订阅的实现原理,思考相关问题. 源码版本:Redis 6.0.10 思考问题 发布订阅基本概念介绍 订阅频道 -- SUBS ...
最新文章
- 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露
- go defer 语句会延迟函数的执行直到上层函数返回。
- 【Android】 Android中spinner下拉列表的使用
- 浏览器从输入URL到页面渲染过程 ——页面渲染流程
- 浙江大学PAT上机题解析之1008. 数组元素循环右移问题 (20)
- 计算机系数据结构03年试题答案,03年北京文考“数据结构”试题
- C++ 继承与组合的区别
- clion开发php,如何在 Mac 上用 Clion 调试 php7 源码
- 在c++和C中,malloc函数的头文件是什么?C头文件, <stdlib.h>;C++头文件, <cstdlib>
- python人名抽签_办公人员的 python 妙用——抽签结果提取
- 安卓引用思源黑体字体,出现标点“ ‘ ” 时候会显示成“)”
- fedora linux五笔输入法,教你在Fedora 14 下安装五笔输入法
- win7无法打开计算机共享文件夹,win7无法共享文件夹 共享文件设置不了共享怎么办?...
- 分享一个xshell7的绿色版
- Transformer 真的很全能!谷歌用协同训练策略实现多个SOTA,单一ViT模型执行多模态多任务...
- Linux常见Bug解决方案
- 大数据——Flink 知识点整理
- Nginx 防止被域名恶意解析的方法
- OWC 绘制3D柱状图
- C#中常用控件及其属性的用法