01、Redis 源码解析 - 为什么要学习 Redis 源码呢?

今年给自己定的小目标是深入并系统性地学习Redis,前几个月学习了Redis的相关课程,逐渐加深了对Redis的理解,但感觉还是不够,于是决定接下来几个月来学习Redis源码。

对于学习Redis源码这件事情,可能很多小伙伴会有很多质疑和疑问,比如我下面列举的一些。

1、 工作只要会一些命令不就可以了,学习源码又用不到;
2、 学习源码太枯燥,学不了几天就放弃了;
3、 想学习但是不知道从哪里学起?;

对于学习Redis源码当然还会有很多疑问,我们这里暂且就说上面几个主要的问题,接下来说下我为什么要学习Redis源码,相信可以小伙伴们一个参考。

1、工作中Redis接触的比较多

在工作中我们会经常使用Redis,使用它来做一些缓存的场景,虽然掌握一些基础命令就可以使用它,但遇到一些复杂变态的问题,可能就需要去阅读源码看看Redis是如何实现的,如果临时再去阅读可能比较艰难,因为没有系统性地阅读过。

2、可以系统性地学习一门知识

其实这么多年,我乱七八糟的学习了很多东西,但大多数都是浅尝辄止,就学下表面的东西,例如一些语法、使用命令什么的,这样学习只能知道有这个东西,时间一长不用就忘记了。
大家都知道计算机这个行业日新月异,技术更迭比较迅速,稍一不注意就更上不他们的节奏,但其实不管这些技术怎么变化,他们的底层基石很大程度都是没有变的,如果我们能够系统性掌握这些底层知识,就能够很好迎接新技术的出现。
当然了,学习底层知识可能非常枯燥,不是一蹴而就的,所以我决定借助学习一门比较综合的开源项目,慢慢学习,所以Redis是一个不错的选择。

3、增强阅读源码的能力

在我们开发的过程中,引入一些新技术或者新框架的时候,可能会遇到一些莫名其妙的问题,第一反应我们会自己思考之前有没有遇到过类似的问题,结合自己的以往经验尝试地解决它,但是发现没有遇到过下意识可能去网上搜索相关的答案,但是大部分情况可能搜索不到,如果这个时候求助无门的话,可能就要动用杀手锏,去查看他的源代码,去看看人家是如何实现这个功能,如果没有阅读源码的习惯,就会产生比较大的抗拒心理和头疼,这个问题肯能就不了了之了。
所以为了增强解决棘手问题的能力,尝试增加阅读源码的能力,也是一个不错的选择。

4、学习遇到瓶颈,想突破瓶颈

相信有不少的伙伴,工作几年之后感觉自己似乎遇到瓶颈,该学的东西貌似都学了,由于天天限于只能CRUD,好像也没什么突破,对于这点我个人感触就很深,平常学习了Redis、MQ、MySQL、设计模式、各种乱七八糟编程语言啥的,但是都是初级的涉猎一下,并没有深入学习,这样就造成自己的知识不系统,深度不够,不能把自己学习的东西串联起来,时间一长就会迷茫不知所措。
虽然学习源码是一个痛苦且漫长,可能还没有收获的一件事,但我相信只要能咬咬牙把这块硬骨头啃下来,不说自己的能提提升多少,起码以后学习其他的技术都比较轻松,也算是突破了自己的瓶颈,学习一直都是如此,如果不迎难而上,就会一直呆在自己舒适区停滞不前。

5、一探究竟

应该有不少小伙伴都有这样的习惯,对啥问题都习惯一探究竟,为什么会是这样,对于我们平常使用Redis,我们也可以提出很多问题。

  • 为什么Redis这么快? 为什么这么多人使用Redis?
  • 为什么输入一个命令,就可以把内容保存起来?
  • 为什么Redis可以支持那么多数据结构?
  • Redis是怎么解析命令,执行命令的?

等等一系列的问题,可能有人说这些问题可以去网上搜,或者看书,这些途径或许可以找到答案,但这些答案都是经过别人思考输出的,这样的话我们很大程度会被他人的答案所影响,如果他说的是对的还好,如果他也只是一知半解,就会误导我们。
所以寻找这些问题的答案最好办法,就是阅读源码,因为源码不会骗人,也没有经过任何加工,它就原原本本的在那里,我们可以通过源码找到我们需要的答案,根据我们自己的思考在和其他人的想法碰撞一番,就可以更好佐证一件事情的真相。

End

我想学习Redis源码的原因大概就是上诉这些,可以简单的归结一句话就是提升自己的硬实力,当然提升自己实力有很多渠道,因人而因对学习Redis源码感兴趣的可以尝试学习学习。

后续我会陆续更新自己学习Redis源码的一些学习记录,刚开始可能比较粗糙,至于学习方法我也在慢慢摸索,后续摸索出来也会更新在这个系列里,大家一起进步吧。

目前简单的路线,就是先学习几个基本数据类型的源文件,然后看看几个我们常用的命令实现方式,慢慢在探究其他的源码,慢慢地串联在一起。

可以先从几个数据结构的文件开始: t_string.c、t_list.c、t_hash.c、t_set.c、t_zset.c

怕大家找不到源码下载地址,可以下载我上传的Redis源码 Redis3.0源码