从今天起,本人将会展开对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 高低位转换,不同系统,高低位顺序不同

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 redisclient程序





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.c

2.sentinel.c

2.setproctitle.c

3.valgrind.sh

4.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源代码分析(一)--Redis结构解析的更多相关文章

  1. 【Redis源代码剖析】 - Redis内置数据结构之压缩字典zipmap

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51111230 今天为大家带来Redis中zipmap数据结构的分析,该结构定义在 ...

  2. redis 源代码分析(一) 内存管理

    一,redis内存管理介绍 redis是一个基于内存的key-value的数据库,其内存管理是很重要的,为了屏蔽不同平台之间的差异,以及统计内存占用量等,redis对内存分配函数进行了一层封装,程序中 ...

  3. Redis源代码分析(十一年)--- memtest内存测试

    今天,我们继续redis源代码test下测试在封装中的其它文件.今天读数memtest档,翻译了,那是,memory test 存储器测试工具..可是里面的提及了非常多东西,也给我涨了非常多见识,网上 ...

  4. Redis源代码分析(二十二)--- networking网络协议传输

    上次我仅仅分析了Redis网络部分的代码一部分,今天我把networking的代码实现部分也学习了一遍,netWorking的代码很多其它偏重的是Clientclient的操作.里面addReply( ...

  5. Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法

    他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循 ...

  6. (转)redis源代码分析 – event library

    每个cs程序尤其是高并发的网络服务端程序都有自己的网络异步事件处理库,redis不例外. 事件库仅仅包括ae.c.ae.h,还有3个不同的多路复用(本文仅描述epoll)的wrapper文件,事件库封 ...

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

    昨天分析完adlist的Redis代码.今天立即马不停蹄的继续学习Redis代码中的哈希部分的结构学习,只是在这里他不叫什么hashMap,而是叫dict.并且是一种全新设计的一种哈希结构,他仅仅是通 ...

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

    ziplist和之前我解析过的adlist列表名字看上去的非常像.可是作用却全然不同.之前的adlist主要针对的是普通的数据链表操作. 而今天的ziplist指的是压缩链表.为什么叫压缩链表呢.由于 ...

  9. 【Redis源代码剖析】 - Redis内置数据结构之字典dict

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51018337 今天我们来讲讲Redis中的哈希表. 哈希表在C++中相应的是ma ...

随机推荐

  1. RH033读书笔记(9)-Lab 10 Understanding the Configuration Tools

    Lab 10 Understanding the Configuration Tools Sequence 1: Configuring the Network with system-config- ...

  2. ASP.NET2.0组件控件开发视频 初体验

    原文:ASP.NET2.0组件控件开发视频 初体验 ASP.NET2.0组件控件开发视频 初体验 录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku. ...

  3. STM32 水晶不摇

    刚刚得到一个新的董事会,该设备被编程为去,但执行地址不正确,没有进入c语言 没有进入c语言,有可能是一个难以回答的问题狗,硬狗拆除 检查以下四种情况 1.检查片内的功率是所有权利 2.检查晶体线短路 ...

  4. cocos2dx lua

    对于游戏公司而言.採用游戏脚本lua.python等进行开发也非经常见,可是非常多童鞋对脚本并没有非常熟悉的概念,本篇则向大家简介脚本的用途以及在Cocos2dx基础使用方法: Lua和python这 ...

  5. mysql数据文件迁移到新的硬盘分区的方法

    该系统增加了一个硬盘.要创建新的分区/data文件夹,mysql对于数据文件夹/var/lib/mysql 1.  停止mysql维修 [root@localhost~]# service mysql ...

  6. 一个demo

    package com.entity; /*2015-7-18*/ public class Rover { private CurrentPosition position; public Rove ...

  7. Tri_integral Summer Training 5 总结

    比赛 题目 B D E G H I J 这是泰国的一场区域赛,除了C题英语非常抽以外,其余题目还不算难读. 一开场就发现了三道很水的题目,0:21:34就把三道题给过了,都是1A,赞Moor的手速. ...

  8. 论docker中 CMD 与 ENTRYPOINT 的区别(转)

    Dockerfile 用于自动化构建一个docker镜像.Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: ...

  9. 基于GeoHash算法的附近点搜索实现(一)

    1. 引入 最近在参加学校的计算机仿真大赛,时间好像有点不够,所以只完成了前面的一部分最基础的功能,中途还是选择了放弃.但是之前的部分的确觉得完成得还不错,在这里分享一下.题目是要完成一个宇宙飞船加油 ...

  10. Eclipse-----jrebel实现jetty热部署

    步骤1:下载jrebel将文件解压缩到任意文件夹 步骤2:配置jetty watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVrZXdhbmd6aQ==/f ...