请选择 进入手机版 | 继续访问电脑版

Redis中国用户组(CRUG)论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 11740|回复: 5

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

[复制链接]
  • TA的每日心情
    奋斗
    2017-6-13 10:19
  • 签到天数: 92 天

    [LV.6]常住居民II

    369

    主题

    474

    帖子

    3754

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3754

    最佳新人活跃会员宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2016-3-29 12:07:47 | 显示全部楼层 |阅读模式

    从今天起,本人将会展开对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 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.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,共同学习进步


    转自:http://blog.csdn.net/androidlushangderen/article/details/39803337

    下一篇:Redis源码分析(二)--结构体分析(1)
  • TA的每日心情
    难过
    2016-5-25 01:06
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    2

    帖子

    44

    积分

    新手上路

    Rank: 1

    积分
    44
    发表于 2016-5-25 01:08:21 | 显示全部楼层
    太好了,可以看看
  • TA的每日心情
    开心
    2017-1-13 08:58
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    12

    帖子

    213

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    213
    发表于 2016-5-26 20:30:32 | 显示全部楼层
    C 不知道还看得懂不!
  • TA的每日心情
    奋斗
    2016-6-24 10:10
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    6

    帖子

    59

    积分

    注册会员

    Rank: 2

    积分
    59
    发表于 2016-6-1 16:42:11 | 显示全部楼层
    学习别人是怎么写代码的

    该用户从未签到

    0

    主题

    1

    帖子

    19

    积分

    新手上路

    Rank: 1

    积分
    19
    发表于 2016-9-7 18:58:01 | 显示全部楼层
    MARK~~~~~~
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-6-21 11:13
  • 签到天数: 2 天

    [LV.1]初来乍到

    2

    主题

    4

    帖子

    74

    积分

    注册会员

    Rank: 2

    积分
    74
    发表于 2017-6-21 11:15:42 | 显示全部楼层
    写C#的表示没啥作用
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    阿里云
    阿里云

    Archiver|手机版|小黑屋|Redis中国用户组 ( 京ICP备15003959号

    GMT+8, 2017-7-28 14:52 , Processed in 0.117197 second(s), 30 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表