Solo  当前访客:2 登录 注册
☆gater yu☆

~~ 一个java老鸟的博客 ~~

标签:
Redis源码分析 (36)

Redis源码分析(一)--Redis结构解析

从今天起,本人将会展开对Redis源码的学习,Redis的代码规模比较小,非常适合学习,是一份非常不错的学习资料,数了一下大概100个文件左右的样子,用的是C语言写的。希望最终能把他啃完吧,C语言好久不用,快忘光了。分析源码的第一步,先别急着想着从哪开始看起,先浏览一下源码结构,可以模块式的渐入,不过比较坑爹的是,Redis的源码全部放在在里面的src目录里,一下90多个文件统统在里面了,所以我选...

作者:sky | 创建日期: 2013-11-28 19:15 | 浏览次数: 345 | 评论总数: 0 | 标签:

Redis源码分析(二)--结构体分析(1)

继上次的redis源码分析(一)之后,本人开始订制着一份非常伟大的计划-啃完redis源代码,也对他进行了切块划分,鉴于本人目前对他的整个运行流畅还不特别清楚的情况下,所以决定第一个要解决的就是与逻辑无关的代码,也就是一些基本模块,因为是相互独立的,所以不会影响整体的阅读,所以第一个开刀的就是结构体模块了。结构体模块我划分了差不多10个文件的样子,今天看的主要是adlist.c的文件,收获有如下1...

作者:sky | 创建日期: 2013-11-27 00:59 | 浏览次数: 279 | 评论总数: 0 | 标签:

Redis源码分析(三)---dict哈希结构

昨天分析完adlist的Redis代码,今天马上马不停蹄的继续学习Redis代码中的哈希部分的结构学习,不过在这里他不叫什么hashMap,而是叫dict,而且是一种全新设计的一种哈希结构,他只是通过几个简单的结构体,再搭配上一些比较常见的哈希算法,就实现了类似高级语言中HashMap的作用了。也让我见识了一些哈希算法的实现,比如dbjhash的算法实现,俗称times33,算法,就是不停的*33...

作者:sky | 创建日期: 2013-11-25 06:44 | 浏览次数: 552 | 评论总数: 0 | 标签:

Redis源码分析(四)--sds字符串

今天分析的是Redis源码中的字符串操作类的代码实现。有了上几次的分析经验,渐渐觉得我得换一种分析的方法,如果每个API都进行代码分析,有些功能性的重复,导致分析效率的偏低。所以下面我觉得对于代码的分析偏重的是一种功能整体的思维实现来讲解,其中我也会挑出一个比较有特点的方法进行拆分了解,这也可以让我们见识一下里面的一些神奇的代码。好,回归正题,说到字符串,这不管放到哪个编程语言中,都是使用频率极高...

作者:sky | 创建日期: 2013-11-23 12:28 | 浏览次数: 271 | 评论总数: 0 | 标签:

Redis源码分析(五)---sparkline微线图

sparkline这个单词,我第一次看的时候,也不知道这什么意思啊,以前根本没听过啊,但是这真真实实的出现在了redis的代码中了,刚刚开始以为这也是属于普通的队列嘛,就把他分在了struct包里了。好来分析完了,与原本我所想的差太大了。sparkline英文中的意思“微线图”,这么说吧,类似于折线图,由一个一个信息点构成。所以看到这个意思,你或许就明白了sparkline.c是干什么用的了吧,就...

作者:sky | 创建日期: 2013-11-21 18:12 | 浏览次数: 554 | 评论总数: 0 | 标签:

Redis源码分析(六)---ziplist压缩列表

ziplist和之前我解析过的adlist列表名字看上去的很像,但是作用却完全不同。之前的adlist主要针对的是普通的数据链表操作。而今天的ziplist指的是压缩链表,为什么叫压缩链表呢,因为链表中我们一般常用pre,next来指明当前的结点的前一个指针或当前的结点的下一个指针,这其实是在一定程度上占据了比较多的内存空间,ziplist采用了长度的表示方法,整个ziplist其实是超级长的字符...

作者:sky | 创建日期: 2013-11-19 23:56 | 浏览次数: 274 | 评论总数: 0 | 标签:

Redis源码分析(七)---zipmap压缩图

如果有看过之前我分析的ziplist压缩列表的分析的话,理解这个我觉得不是什么特别的难题。ziplist压缩列表和zipmap都采用了动态分配字节的做法表示长度,比如通过固定的字节表示节省了不少的空间。同样带来的问题就是复杂的指针移动,和字符位置移动。但总的来说,一定是利大于弊了,要不然设计者也不会这么做。ziplist保存的使用一个列表,zipmap就保存的则是一个个键值对,通过key:valu...

作者:sky | 创建日期: 2013-11-18 05:40 | 浏览次数: 212 | 评论总数: 0 | 标签:

Redis源码分析(八)---t_hash哈希转换

在上次的zipmap分析完之后,其实关于redis源代码结构体部分的内容其实已经全部结束了,因为下面还有几个和结构体相关的操作类,就页把他们归并到struct包下了。这类的文件有:t_hash.c,z_list,z_set.c,t_string.c,t_zset.c,这些文件的功能其实都差不多,就是用来实现Client和Server之间的命令处理的操作类,通过robj的形式,把dict,zipli...

作者:sky | 创建日期: 2013-11-16 11:24 | 浏览次数: 230 | 评论总数: 0 | 标签:

Redis源码分析(九)---t_list,t_string的分析

今天我是看完了t_list和t_string的代码,从名字知道,这也是和之前的t_hash非常类似的,无非就是各种形式,转化来转化去的。先讲讲t_list,对比于昨天的t_hash,t_hash是ziplist和dict之间的转换,t_list则是描述的是ziplist压缩表和linedlist普通链表,换句话说,当client这个robj作为参数传入的时候,都分为ENCODING_ZIIPLIS...

作者:sky | 创建日期: 2013-11-14 17:09 | 浏览次数: 510 | 评论总数: 0 | 标签:

Redis源码分析(十)---testhelp.h小型测试框架和redis-check-aof.c日志检测

分析了一段时间的struct结构体的redis代码,越到最后越发现其实很多代码都是大同小异的。在struct包中还有1,2个文件还没分析,是关于set集合的一些东西,就放在下次分析好了,在选择下个分析的对象时,我考虑了一下,最后决定先把简单的test包下的东西看看一下,毕竟结构体这块有点复杂,所以这次分析个简单点的。test包下的文件并不多,代码量也很少,总共5个文件:1.memtest.c内存检...

作者:sky | 创建日期: 2013-11-12 22:53 | 浏览次数: 221 | 评论总数: 0 | 标签:

Redis源码分析(十一)---memtest内存检测

今天我们继续redis源码test测试包下的其他文件,今天看完的是memtest文件,翻译器起来,就是memorytest内存检测的意思,这个文件虽然说代码量不是很多,但是里面的提及了很多东西,也给我涨了很多见识,网上关于memtest这种类似的redis内部边缘的文件解析基本没有,所以自己从头开始学习。机器的内存检测会和机器的CPU位数有关,32位或64位会影响后面的一些宏定义参数。首先亮出me...

作者:sky | 创建日期: 2013-11-11 04:37 | 浏览次数: 228 | 评论总数: 0 | 标签:

Redis源码分析(十二)---redis-check-dump本地数据库检测

这个文件我在今天分析学习的时候,一直有种似懂非懂的感觉,代码量700+的代码,最后开放给系统的就是一个process()方法。这里说的说的数据库检测,是针对key的检测,会用到,下面提到的结构体:/*Datatypetoholdopcodewithoptionalkeynameansuccessstatus*//*用于key的检测时使用,后续检测操作都用到了entry结构体*/typedefstr...

作者:sky | 创建日期: 2013-11-09 10:21 | 浏览次数: 219 | 评论总数: 0 | 标签:

Redis源码分析(十三)---redis-benchmark性能测试

今天讲的这个是用来给redis数据库做性能测试的,说到性能测试,感觉这必然是高大上的操作了,redis性能测试,测的到底是哪方面的性能,如何测试,通过什么指标反映此次测试的性能好坏呢,下面我通过源码给大家做一一解答。redis做的性能测试时对立面的基本操作做的检测,比如Client客户端执行set,get,lpush等数据操作的性能,可以从他的测试程序可以看出:if(test_is_selecte...

作者:sky | 创建日期: 2013-11-07 16:05 | 浏览次数: 228 | 评论总数: 0 | 标签:

Redis源码分析(十四)---rdb.c本地数据库操作

过去2,3天内把redis内部的测试相关包分析了一遍,总体感觉还是比较容易的,总共5个文件,也让我们涨了一下见识,什么叫内置的测试函数。今天,我把目标进行了转移,下面我准备继续学习与代码逻辑稍稍无关的模块,数据层,在我的分类中,就是在Data的文件包。在这个里面,首当其冲,我研究了rdb.c,直接与数据库操作相关。什么叫数据库操作相关呢,最直接的意思就是,数据库的相关操作到最后到会直接映射到这个文...

作者:sky | 创建日期: 2013-11-05 21:49 | 浏览次数: 522 | 评论总数: 0 | 标签:

Redis源码解析(十五)---aof-appendonlyfile解析

继续学习redis源码下的Data数据相关文件的代码分析,今天我看的是一个叫aof的文件,这个字母是appendONLYfile的简称,意味只进行追加文件操作。这里的文件追加记录时为了记录数据操作的改变记录,用以异常情况的数据恢复的。类似于之前我说的redo,undo日志的作用。我们都知道,redis作为一个内存数据库,数据的每次操作改变是先放在内存中,等到内存数据满了,在刷新到磁盘文件中,达到持...

作者:sky | 创建日期: 2013-11-04 03:34 | 浏览次数: 244 | 评论总数: 0 | 标签:

Redis源码解析(十六)---config配置文件

每个系统都会有类似一个config配置文件,config文件里的内容想想都知道,一定就是那么一些固定的一行行的属性代码了,今天在看redis代码中的config属性,那拉下来的一笔,的确多,目测在50至100个属性左右。如果就此将config每个属性代表什么意思不是我的风格,也一定是很乏味的,所以我的特点就是在代码中去理解程序员在写这类代码时的思路,和茫茫代码中的亮点。我们知道,redis运行的环...

作者:sky | 创建日期: 2013-11-02 09:18 | 浏览次数: 244 | 评论总数: 0 | 标签:

Redis源码分析(十七)---multi事务操作

redis作为一非关系型数据库,竟然同样拥有与RDBMS的事务操作,不免让我觉得比较惊讶。在redis就专门有文件就是执行事务的相关操作的。也可以让我们领略一下,在Redis的代码中是如何实现事务操作。首先亮出mulic.c下面的一些API。/*================================MULTI/EXEC==============================*/voi...

作者:sky | 创建日期: 2013-10-31 15:02 | 浏览次数: 570 | 评论总数: 0 | 标签:

Redis源码分析(十八)---db.c内存数据库操作

我们知道Redis数据库作为一个内存数据库,与memcached比较类似,基本的操作都是存储在内存缓冲区中,等到缓冲区中数据满后,在持久化到磁盘中。今天,我主要研究了对于redis中对于内存数据库的操作。与普通的数据操作比较,并没有什么特别多的其他的一些操作。下面是我分类出的一些API:/*------------------------------------------------------...

作者:sky | 创建日期: 2013-10-29 20:46 | 浏览次数: 254 | 评论总数: 0 | 标签:

Redis源码分析(十九)---replication主从数据复制的实现

replication的英文单词的原意是“复制”的意思,replication文件作为我在Data目录下的分析的最后一个文件,足以说明他的重要性,代码量1800+,的确非常难啃。只能说个我看代码下来的大致印象吧,要我画个结构图好好理理这里面各个API的关系图,这个我目前还真做不到。说到主从复制,这个是实现读写分离的最好手段了,也很常见,当用户数达到一定量,当一个服务器承受不了达到上千万的pv时,采...

作者:sky | 创建日期: 2013-10-28 02:30 | 浏览次数: 345 | 评论总数: 0 | 标签:

Redis源码分析(二十)---ae事件驱动

事件驱动这个名词出现的越来越频繁了,听起来非常高大上,今天本人把Redis内部的驱动模型研究了一番,感觉收获颇丰啊。一个ae.c主程序,加上4个事件类型的文件,让你彻底弄清楚,Redis是如何处理这些事件的。在Redis的事件处理中,用到了epoll,select,kqueue和evport,evport可能大家会陌生许多。前面3个都是非常常见的事件,在libevent的事件网络库中也都有出现。作...

作者:sky | 创建日期: 2013-10-26 08:14 | 浏览次数: 226 | 评论总数: 0 | 标签:

1 2   共 2 页面