sparkline这个单词,我第一次看的时候.也不知道这什么意思啊,曾经根本没听过啊,可是这真真实实的出如今了redis的代码中了,刚刚開始以为这也是属于普通的队列嘛.就把他分在了struct包里了. 好来分析完了.与原本我所想的差太大了.sparkline英文中的意思"微线图",这么说吧.类似于折线图,由一个一个信息点构成.所以看到这个意思.你也许就明确了sparkline.c是干什么用的了吧,就是绘图用的. 我们看看这个绘图的内部结构是什么,绘图须要的元素是哪些: /* spark…
今天,我们继续redis源代码test下测试在封装中的其它文件.今天读数memtest档,翻译了,那是,memory test 存储器测试工具..可是里面的提及了非常多东西,也给我涨了非常多见识,网上关于memtest这样的类似的redis内部边缘的文件解析基本没有,所以自己从头開始学习.机器的内存检測会和机器的CPU位数有关,32位或64位会影响后面的一些宏定义參数. 首先亮出memtest中的API: /* 内存检測API */ void memtest_progress_start(cha…
从今天起,本人将会展开对Redis源代码的学习,Redis的代码规模比較小,很适合学习,是一份很不错的学习资料,数了一下大概100个文件左右的样子,用的是C语言写的.希望终于能把他啃完吧,C语言好久不用,快忘光了.分析源代码的第一步,先别急着想着从哪開始看起,先浏览一下源代码结构,能够模块式的渐入,只是比較坑爹的是,Redis的源代码所有放在在里面的src文件夹里,一下90多个文件统统在里面了,所以我选择了拆分,按功能拆分,有些文件你看名字就知道那是干什么的.我拆分好后的而结果例如以下: 11个…
一,redis内存管理介绍 redis是一个基于内存的key-value的数据库,其内存管理是很重要的,为了屏蔽不同平台之间的差异,以及统计内存占用量等,redis对内存分配函数进行了一层封装,程序中统一使用zmalloc,zfree一系列函数,其相应的源代码在src/zmalloc.h和src/zmalloc.c两个文件里,源代码点这里. 二,redis内存管理源代码分析 redis封装是为了屏蔽底层平台的差异,同一时候方便自己实现相关的函数,我们能够通过src/zmalloc.h 文件里的相…
他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循环冗余校验算法.CRC校验的基本思想是利用线性编码理论,在发送端依据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去. 在接收端, 则依据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出…
Volley源代码分析系列那里一段时间,告诉我,有许多私人留言,同时一些问题抛出.对于一些简单的问题,我们跳,这两天被连接到朋友@smali提出的问题.告诉我你不得不赞叹查看源代码时的详细程度,大家一块思考一下. Q:在写入文件头数据的时候为何不直接写入Int而是通过移位的方式来完毕? 我们来看一下相应的源代码: writeInt(os, CACHE_MAGIC); static void writeInt(OutputStream os, int n) throws IOException {…
在Redis服务端的代码量真的是比較大,假设一个一个API的学习怎么实现,无疑是一种效率非常低的做法,所以我今天对服务端的实现代码的学习,重在他的运行流程上.而对于他的模块设计在上一篇中我已经分析过了.不明确的同学能够接着看上篇.所以我学习分析redis服务端的实现也是主要从main函数開始.在分析main运行流程之前,Redis的作者在这里声明了几个变量,这个我们有必要知道一下. /* Our shared "common" objects */ /* 共享的对象 */ struct…
ziplist和之前我解析过的adlist列表名字看上去的非常像.可是作用却全然不同.之前的adlist主要针对的是普通的数据链表操作. 而今天的ziplist指的是压缩链表.为什么叫压缩链表呢.由于链表中我们一般经常使用pre.next来指明当前的结点的前一个指针或当前的结点的下一个指针,这事实上是在一定程度上占领了比較多的内存空间.ziplist採用了长度的表示方法.整个ziplist事实上是超级长的字符串,通过里面各个结点的长度.上一个结点的长度等信息,通过高速定位实现相关操作.并且编写者…
周期分析struct结构体redis代码.最后,越多越发现很多的代码其实大同小异.于struct有袋1,2不分析文件,关于set集合的一些东西,就放在下次分析好了,在选择下个分析的对象时,我考虑了一下,最后决定先把简单的test包下的东西看看一下.毕竟结构体这块有点复杂.所以这次分析个简单点的. test包下的文件并不多,代码量也非常少,总共5个文件: 1.memtest.c 内存检測 2.redis_benchmark.c 用于redis性能測试的实现. 3.redis_check_aof.c…
昨天分析完adlist的Redis代码.今天立即马不停蹄的继续学习Redis代码中的哈希部分的结构学习,只是在这里他不叫什么hashMap,而是叫dict.并且是一种全新设计的一种哈希结构,他仅仅是通过几个简单的结构体.再搭配上一些比較常见的哈希算法,就实现了类似高级语言中HashMap的作用了.也让我见识了一些哈希算法的实现.比方dbj hash的算法实现.俗称times33,算法,就是不停的*33,.这样的算是一种超级简单的哈希算法. 以下说说给我感觉Redis代码中哈希实现的不是那么简单.…