Redis学习笔记(三)Redis源码解读

http://blog.csdn.net/u012155923/article/details/51623370

经过前两节的学习,我们已经可以在本地搭建Redis环境,并且可以通过简单的命令行来对Redis进行操作,当然这离实现完全掌握Redis,并且将其用作工业用途,那要走的路还有很多很多,今天换个角度来继续学习Redis。
再回顾一下Redis的简介:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API 可以看到Redis是基于C语言实现的,因此,我们这一节就简单介绍一下Redis的源码的结构以及如何通过源码来深入学习Redis。
首先我们需要将Redis的源码下载到本地,这里为大家推荐一款非常强大的代码阅读器-Source Insight,顺便附上一个下载地址,大家可以先去下载下来安装好。
接下来要做的就是获取Redis的源码,我们可以登录Redis中文官网 (英文网站也有,英语好的同学可以去看看~),登录到网站以后,点击Redis下载以后,再点击Windows中more按钮,会跳转到github里的Redis项目:
这里写图片描述
将整个项目都下载到本地,压缩包解压后,src里面就是Redis项目的源码:
这里写图片描述,还记得咱们之前安装好的Source Insight么?打开它:
这里写图片描述
新建一个项目并且载入Redis项目代码,Redis的代码并不多,100多个文件,总共3万行代码的样子,为了能更好地阅读源码,我们将Redis的源码分为几个层次,然后层层递进地去阅读源码:

第一层:数据结构。
前一节介绍了Redis中的数据类型,分别是最常用的字符串、双向链表、哈希,其相应的文件分别是:sds.c、adlist.c、dict.c,掌握好这些数据结构,就是学习Redis的第一步。

第二层:内存编码数据结构实现
在阅读完和数据结构有关的文件之后, 接下来就应该阅读内存编码(encoding)数据结构了。和普通的数据结构一样, 内存编码数据结构基本上是独立的, 不和其他模块耦合, 但是区别在于:
上一步要读的数据结构, 比如双向链表、哈希表、在算法书上或者相关的论文上都可以找到资料介绍,而内存编码数据结构却不容易找到相关的资料, 因为这些数据结构都是 Redis 为了节约内存而专门开发出来的, 换句话说, 这些数据结构都是特制(adhoc)的, 除了 Redis 源码中的文档之外, 基本上找不到其他资料来了解这些特制的数据结构。
不过话又说回来, 虽然内存编码数据结构是 Redis 特制的, 但它们基本都和内存分配、指针操作、位操作这些底层的东西有关, 读者只要认真阅读源码中的文档, 并在有需要时, 画图来分析这些数据结构, 那么要完全理解这些内存编码数据结构的运作原理并不难, 当然这需要花一些功夫。
各个内存编码数据结构的实现文件:
intset.h和 intset.c 整数集合(intset)数据结构。
ziplist.h和 ziplist.c 压缩列表(zip list)数据结构。

第三层:阅读数据类型实现
object.c Redis 的对象(类型)系统实现。
t_string.c 字符串键的实现。
t_list.c 列表键的实现。
t_hash.c 哈希键的实现。
t_set.c 集合键的实现。
t_zset.c 有序集合键的实现。
hyperloglog.c HyperLogLog 键的实现。

第四层:数据库实现相关代码
redis.h 文件中的 redisDb结构。Redis 的数据库实现。
notify.cRedis 的数据库通知功能实现代码。
rdb.h和 rdb.c Redis 的 RDB 持久化实现代码。
aof.c Redis 的 AOF 持久化实现代码。

第四层:客户端和服务器的相关代码

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

第六层:阅读多机功能的实现
replication.c 复制功能的实现代码。
sentinel.c Redis Sentinel 的实现代码。
cluster.c Redis 集群的实现代码。

在读完了上述所有的代码后,相信你即便没有怎么使用过Redis,也能大致了解Redis的运行机制,对我们学习Redis提供很好的帮助!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值