ITKeyword - 技术文章推荐分享

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

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

相关推荐:Redis源码分析(二)--结构体分析(1)

继上次的redis源码分析(一)之后,本人开始订制着一份非常伟大的计划-啃完redis源代码,也对他进行了切块划分,鉴于本人目前对他的整个运行流畅还不特别清楚的情况下,所以决定第一个要解决的就是与逻辑无关的代码,也就是一些基本模块,因为是相互

从今天起,本人将会展开对Redis源码的学习,Redis的代码规模比较小,非常适合学习,是一份非常不错的学习资料,数了一下大概100个文件左右的样子,用的是C语言写的。希望最终能把他啃完吧,C语言好久不用,快忘光了。分析源码的第一步,先别急着想着从哪开始看起,先浏览一下源码结构,可以模块式的渐入,不过比较坑爹的是,Redis的源码全部放在在里面的src目录里,一下90多个文件统统在里面了,所以我选择了拆分,按功能拆分,有些文件你看名字就知道那是干什么的。我拆分好后的而结果如下:11个包,这样每个包中的文件就比较可接受了,但是分出这个类别,我也是花了一定时间,思考了下,Redis下的主要的一些文件的特征,最后定的,应该算是比较全的了。下面开始一个包一个包的介绍:test:(测试)1.memtest.c 内存检测2.redis_benchmark.c 用于redis性能测试的实现。3.redis_check_aof.c 用于更新日志检查的实现。4.redis_check_dump.c 用于本地数据库检查的实现。5.testhelp.c 一个C风格的小型测试框架。struct:(结构体)1.adlist.c 用于对list的定义,它是个双向链表结构2.dict.c 主要对于内存中的hash进行管理3.sds.c 用于对字符串的定义4.sparkline.c 一个拥有sample列表的序列5.t_hash.c hash在Server/Client中的应答操作。主要通过redisObject进行类型转换。6.t_list.c list在Server/Client中的应答操作。主要通过redisObject进行类型转换。7.t_set.c

set在Server/Client中的应答操作。主要通过redisObject进行类型转换。8.t_string.c string在Server/Client中的应答操作。主要通过redisObject进行类型转换。9.t_zset.c zset在Server/Client中的应答操作。主要通过redisObject进行类型转换。10.ziplist.c

ziplist是一个类似于list的存储对象。它的原理类似于zipmap。11.zipmap.c

zipmap是一个类似于hash的存储对象。data:(数据操作)1.aof.c 全称为append only file,作用就是记录每次的写操作,在遇到断电等问题时可以用它来恢复数据库状态。2.config.c 用于将配置文件redis.conf文件中的配置读取出来的属性通过程序放到server对象中。3.db.c对于Redis内存数据库的相关操作。4.multi.c用于事务处理操作。5.rdb.c

对于Redis本地数据库的相关操作,默认文件是dump.rdb(通过配置文件获得),包括的操作包括保存,移除,查询等等。6.replication.c 用于主从数据库的复制操作的实现。tool:(工具)1.bitops.c 位操作相关类2.debug.c 用于调试时使用3.endianconv.c 高低位转换,不同

相关推荐:Redis源码分析(二十五)--- zmalloc内存分配实现

时间过的很快,经过快1个月的时间学习,本人对Redis源代码的分析已经超过了一半,上几次的学习,我主要的是对于Redis工具类的代码进行了学习。后面的几天我将会学习Redis代码中的一些封装类的实现,这些封装类在整个Redis系统中都可能普遍用到。

系统,高低位顺序不同4.help.h

辅助于命令的提示信息5.lzf_c.c 压缩算法系列6.lzf_d.c

压缩算法系列7.rand.c 用于产生随机数8.release.c 用于发步时使用9.sha1.c sha加密算法的实现10.util.c

通用工具方法11.crc64.c 循环冗余校验event:(事件)1.ae.c 用于Redis的事件处理,包括句柄事件和超时事件。2.ae_epoll.c 实现了epoll系统调用的接口3.ae_evport.c 实现了evport系统调用的接口4.ae_kqueue.c 实现了kqueuex系统调用的接口5.ae_select.c 实现了select系统调用的接口baseinfo:(基本信息)1.asciilogo,c redis的logo显示2.version.h定有Redis的版本号compatible:(兼容)1.fmacros.h 兼容Mac系统下的问题2.solarisfixes.h 兼容solary下的问题main:(主程序)1.redis.c redis服务端程序2.redis_cli.c redis客户端程序net:(网络)1.anet.c 作为Server/Client通信的基础封装2.networking.c 网络协议传输方法定义相关的都放在这个文件里面了。wrapper:(封装类)1.bio.c background I/O的意思,开启后台线程用的2.hyperloglog.c 一种日志类型的3.intset.c

整数范围内的使用set,并包含相关set操作。4.latency.c 延迟类5.migrate.c 命令迁移类,包括命令的还原迁移等6.notify.c 通知类7.object.c

用于创建和释放redisObject对象8.pqsort.c

排序算法类9.pubsub.c 用于订阅模式的实现,有点类似于Client广播发送的方式。10.rio.c redis定义的一个I/O类11.slowlog.c 一种日志类型的,与hyperloglog.c类似12.sort.c 排序算法类,与pqsort.c使用的场景不同13.syncio.c 用于同步Socket和文件I/O操作。14.zmalloc.c 关于Redis的内存分配的封装实现others:(存放了一些我暂时还不是很清楚的类,所以没有解释了)1.scripting.c2.sentinel.c2.setproctitle.c3.valgrind.sh4.redisassert.h

我分析的此Redis源代码是目前最新的代码redis-2.8.17,确保是最新的,新加了crc64.c等这些在2.2左右的版本上根本没有, 里面的很多.h头文件被我省掉了,因为很多同个文件名.h,.c文件都是其实指的是同个功能,后续,我将会分模块式分析Redis源代码,工作的时候根本没时间进行代码级别的研究。抓紧时间啦,fighting!在我的github上会持续更新Redis代码的中文分析,地址送出https://github.com/linyiqun/Redis-Code,共同学习进步

相关推荐:Redis源码分析(三)---dict哈希结构

昨天分析完adlist的Redis代码,今天马上马不停蹄的继续学习Redis代码中的哈希部分的结构学习,不过在这里他不叫什么hashMap,而是叫dict,而且是一种全新设计的一种哈希结构,他只是通过几个简单的结构体,再搭配上一些比较常见的哈希算法,就实现

? ? ? ? ? ?从今天起,本人将会展开对Redis源码的学习,Redis的代码规模比较小,非常适合学习,是一份非常不错的学习资料,数了一下大概100个文件左右的样子,用的是C语言写的。希望最终能把他...

------分隔线----------------------------