Redis源码学习–开始(0)
一些技术无关的闲话
秋招结束了很长时间了,我如当时所想,找到了一家还不错的IT公司,拿到了offer,下半个学期就要去实习了。当然,并不意味着技术学习的停滞,反而恰恰是个新的起点,意味着以后要熟悉各种工具,各种框架等实际场合使用的东西。当然,闲暇之余,对于我这样的萌新来说,底层的内容还是要打好基础,学无止境。当看到的东西越多时,自己会发现看不到的东西更多。(之前秋招的时候开的坑,现在都两年了,时间过得可真快)
新的开始
好了,多余的感悟先不谈了。先说正事,目前当下很火的redis数据库想必各个公司都在使用,毕竟这是个作为"数据结构服务器"的存在,而用好数据结构,可以使计算机的效率的到质的提升,学习一下还是非常有必要的。redis的介绍。。。前人之述备矣。说是个数据库,但是一般还是用作缓存服务器或者是实现web应用中的session共享的功能等等,反正用好之后就一个字,快。而以redis作为我的第一个阅读的项目还是有原因的:
- 它的代码量并不是特别庞大的,而且相关资料还是比较全的。
- 他有着极少的依赖,对于我这种没有项目经验的人来说,基本上不需要再掌握其他方面的知识,即可阅读。
- 对于以后要从事的后端开发的工作,这个项目从网络,事件,数据结构,数据库的实现等方面都有涉及。
当然,也有一部分原因是当时面试时面试官给出的建议。所以在自己亲自阅读了一部分代码之后,再回头看网上各种大佬也都建议从这里入手,更加坚定了我读下去的信心。所以之后先更新自己的阅读心得。
关于整个系列的风格
为了避免落入俗套,我不可能将所有的代码全部复制粘贴到我的博客上,然后在上面加自己的注释,这种方法已经有不少博主尝试了,我在学习的时候看过不少这样的博客,本人窃以为,这样并不能给读者带来丝毫帮助,因为阅读起来非常麻烦。因此我的博客只做一些自己的理解,将其中部分核心(我认为是核心)的代码粘贴出来,然后再谈谈自己的理解。至于未能详尽道出之处,请移步至后文中的github链接,寻找源码,一探究竟。
关于学习
欲速则不达,不要浮躁。
但是我以前就是一个浮躁的人,这可能是我第一次认真的做一件事情,说起来挺悲哀的,回首以前自己从来没有拿出现在的劲头来学习,也可能是我碰到了真正喜欢做的事情了,感谢技术(又吹一波技术的好)。第一次阅读规模这么大的代码,在这里我的学习这堆代码的方法也给大家分享一下,有什么能帮到大家的本人万分荣幸,如果各位还有什么建议的话欢迎提出哦。
- 首先,源码的阅读很多大神说不在乎细枝末节,但是如果你不是大神,请将一些晦涩难懂的关键代码思路一定要理清楚,实在不行,拿个小本本,画画图,想想如果这个接口让你去实现,你会怎么搞,然后自己写写,再去看人家的代码,会长进不少。
- 过度的关注调用层次以及下层的接口到底做了什么事情都想要搞清楚确实是不可取的,这会让你忘记了你原本想要理解的代码的含义,简而言之,就是你钻到底下去,钻的太深,就不好再爬回来了。但是,阅读的时候别忘了笔记,每个层次的接口主要是做什么的,里面大概做了什么事情,这总得会,但是过了不久之后全忘了,这会给阅读代码增添很多障碍,所以笔记必不可少。这里我用的是xmind整理的,整理之后,各个接口的细节一目了然,而不用在看到一段之前好像见过的代码,又要返回去重新看,这样节省了大量的时间。
- 进行了一段时间的阅读之后,总结是一定的,正如我现在所做。
- 闭门造车是不可取的。像redis这种比较受欢迎的项目,肯定有不少人都读了,不乏有一些善于总结以及表达的人,在个人理解的基础上,请多看看别人的理解,可能大家关注点不一样,多看看自然有不一样的收获,他山之石,可以攻玉。
- 各种工具的使用也是要熟练。如上文中的xmind,还有一些别的工具,容我用时再说。
- 如果觉得读起来不顺畅,不知所以,那么建议找一个合适的阅读顺序:一位大佬建议你阅读的顺序
- 如果还是不懂。。。别看了,基础最重要,先打好基础再回来看,不然我想这会是一段非常痛苦且长进不多的时间
- 最后我想长期逛github的各位亲,英语的重要自然不必多说了吧。
我想一定还有一些我遗漏的平时的习惯没有写出,容我后续想到再补。
最后的唠叨
希望可以帮到大家之中正在打算深入学习一些项目却又无从下手的人,同时也希望我的博客也能成为大家眼中的他山之石,理解的不对的地方,还请不吝赐教,一定感激不尽;博客中不详细的地方,错别字也请大家提出意见,我好做整改。与君共勉!
我使用的git地址
[1].antires大神的项目原地址,原生的redis,原生的注释,各种其他人的issue自然少不了有你的疑问
[2].一位大佬做的简化版本,其中有简单的中文注释,方便阅读,但是功能可能不齐全,不过作为学习足够了
建议大家fork为一个自己的版本,好做注释,方便管理。