Redis是一个很简单的nosql类型的数据库,代码量相对来说是比较少的.但是代码风格确实比较漂亮.
我打算花一段时间剖析一下它的代码,不光是看啦,看的话,收获是不大的.我打算从Redis那纷繁复杂,令人眼花缭乱的代码里剥出一个单机的数据库,能够运行的,但是没有那么多的错误处理代码,这样以来既可以学到作者的代码风格,也可以看到如何来实现一个数据库,同时还可以学习网络编程,确实是一举多得的一件事情.
如果你想了解一下源码的话,推荐一本写的比较清楚的书:
<<Redis设计与实现>>
我应该会在这项工作估计花几个星期吧,最迟应该不超过一个月,剥完之后,我打算用cpp来写一个redis客户端.然后我研究生期间的网络编程学习之旅估计就到头了,因为加上我之前做过的一些东西,linux网络编程的一些特别坑的地方,以及特别精华的东西已经触摸到了,剩下的都不是什么难事了,如果将来工作是这方面的话,就等待工作慢慢地熟练了.
现在已经读了一部分,最起码它的统一事件源部分已经剥出来了,接下来慢慢添加剩余的代码.
如果你也感兴趣的话,可以看一下我剥出来的代码:https://github.com/lishuhuakai/Redis-Simplify
12月10日:
~~~~~~~~~~
完结撒花,代码已经剥离完毕,代码也能很好地运行了,我使用的机器是ubuntu 15.10.接下来就是写一个客户端来练练手了,相比于服务端,客户端简直就是小儿科.
12月3日:
~~~~~~~~~~
代码现在已经非常臃肿了.看来C的代码到了一定的程度之后,真的变得很难管理了.个人突然觉得1到2万的c代码还在掌控之内,再多就已经超过我能掌控的范围了.换句话说,你不可能做到细节与宏观都了解得一清二楚,太费劲了.
这或许也是为什么人们要提出抽象的原因吧,我只规定一套接口,我的代码依赖于这套接口之上,至于你怎么实现,那就和我没有多大的关系了.
还有一点,c工程写大之后,其实你去看它的代码,其实里面用了很多面向对象的思想,包括数据的封装,代码的复用,感觉越写越像cpp.代码我已经剥了很大的一部分了,应该用不了多久就能剥出一个单机NoSql数据库了.然后准备开始写redis的客户端了.