忘记是什么时候,脑中浮现了想看看redis源码的想法,虽然跨语言,但是还是想亲自去调试一下代码,不然对我来说redis就是一个黑盒,在一些实际场景下使用可能不够正确,看到一些关于redis的文章的时候,也只能选择暂时相信他。。。
都说万事开头难,我作为一个纯种的java程序员,只凭大学的一点c语言基础想阅读redis源码,开头显得格外的难。C系语言作为站在鄙视链最顶端的语言,总是会给入门者施加巨大的压力。
今天终于是择日不如撞日,特此记录一下!
虽然没有那么懂c语言,但是这次还是刷新了一些认识。比如,之前背过很多c语言是面向过程的,java是面向对象的,但是并没有理解的很深刻。在开始调试的时候顿悟,c语言方法的传参的思考方式和java完全不同。在java的世界里,我可以创建一个人,直接扔到一个方法中给他穿一件衣服然后丢出来,但是c语言丢进去都是一些指针,打断点看到一堆地址,作为一个java程序员表示思维习惯一瞬间确实很难适应过来
下载源码
首先在gitHub找到redis的地址是github.com/redis/redis
(如果在这里点进src目录会发现,其实redis的代码并不多,后来一想其实redis的功能也并不复杂,都是比较直接的存取加上一些持久化,似乎也挺合理的)
然后用git命令下载源码,然后。。。
这是要下载到什么时候。。。我这急性子可受不了!
这里分享一个我很喜欢用的技巧,github的代码可以同步到gitee再下载(gitee究极打工人)
在右上角点击这个加号选新建仓库
点击新建仓库的右上角的<点击导入>
然后把github的链接复制到这里,点击创建,等一会同步好了就可以下载了,速度可以直接飞起来(折腾完之后可能死等也下完了~)
编译
下载好源码之后,现在就要开始编译代码了!
按照官方文档的说明 只要一行朴实无华的make就行了
但是我本地第一次运行make命令的时候提示我没有pkg-config,于是我拿着报错去网上搜了很多方法,最后终于是安装成功了。。。
- 下载安装包 pkgconfig.freedesktop.org/releases/pk…(不知道为什么我用命令下载之后总是说我的文件不全。。)
tar -zxvf pkg-config-0.29.2.tar.gz./configure --with-internal-glibmakesudo make installl切换到redis的src文件夹make
这样就编译结束了,但我在第6步的时候执行命令之后一直会返回Hint: It's a good idea to run 'make test' ;),最开始以为是报错,后来发现其实不管用什么最后都会跟着这句话,通过github上大神的试了一下make distclean之后再make就可以进行下去了
启动
配置一下Exxcutable,在src目录下面可以找到这个文件
然后就可以启动了(这熟悉的日志)
调试
先感受一下redis的单线程,用命令行开启两个客户端,连接到本地启动的redis。然后在t_string.c这个文件的setCommand方法第一行打一个断点,你肯定能猜到这个方法是set命令的必经之路
一个终端执行set test 2,这个时候一定会被我们的断点拦截到。
同时切换到另一个终端执行get test,发现get命令果然阻塞住了
到这,对常说的redis不要用大value就有了一些新的认识。这感觉就像是一个没见过苹果的人,从手机电脑上看了很多苹果的图片、描述,有一天拿到了真正的苹果的感觉。
那这就是本文的全部内容了,如果觉得有用别忘了点个赞啊!