目录
  1. 1. redis源码阅读
    1. 1.1. 序言
    2. 1.2. 阅读源码的准备
    3. 1.3. redis源码编组
      1. 1.3.1. 事件驱动
      2. 1.3.2. 网络
      3. 1.3.3. 数据结构
      4. 1.3.4. 工具
      5. 1.3.5. 封装类
      6. 1.3.6. 测试
      7. 1.3.7. 数据操作
      8. 1.3.8. 平台兼容问题
      9. 1.3.9. redis基本信息
  • redis核心功能
    1. 0.0.1. 其他
  • 0.1. 参考文献
  • redis源码阅读-序

    redis源码阅读

    序言

    redis是由c语言编写的一款高性能nosql数据库,其代码量小,使用的数据结构和算法也非常的经典,很有利于我们学习数据结构和算法。
    当前,redis缓存数据库被应用于各个大型项目中作为缓存中间件,其应用范围很广泛,研读其源码能让我们更加清楚redis的内部机制,更好的操作redis。
    现在让我们一起进入redis的源码世界,畅游数据结构与算法的海洋。

    阅读源码的准备

    在阅读源码之前,我们首先要有两手准备,手头要有一本解析redis的书,能够让你快速的认识redis的各大模块,将redis的各个源码文件编组,一个模块一个模块的慢慢吃透。在这里,我给大家推荐一本书------redis设计与实现(第二版) ,它非常透彻的解析redis中采用的数据结构和算法,搭配这本书看源码,着实是一种享受。
    好了,现在开始!

    redis源码编组

    为了便于阅读源码,我根据自己理解,通过给源码文件功能不同分组。

    事件驱动

    1
    2
    3
    4
    5
    6
    ae.h
    ae.c
    ae_epoll.c
    ae_evport.c
    ae_kqueue.c
    ae_select.c

    网络

    1
    2
    3
    anet.c
    anet.h
    networking.c

    数据结构

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    adlist.h
    adlist.c // 使用双向链表实现列表
    ziplist.h
    ziplist.c // 压缩列表,哈希键和列表键的底层实现
    zipmap.h
    zipmap.c // 压缩字典
    quicklist.h
    quicklist.c // 快速列表
    dict.h
    dict.c // 字典
    sds.h
    sdsalloc.h
    sds.c // 简单动态字符串
    intset.h
    intset.c // 整数集合
    rax.h
    rax_malloc.h
    rax.c // 基数数
    t_hash.c // 哈希对象
    t_list.c // 列表对象
    t_set.c // 集合对象
    stream.h
    t_stream.c // 流对象
    t_string.c // 字符串对象
    t_zset.c // 有序集合对象
    listpack.h
    listpack_malloc.h
    listpack.c // redis5.0新特性,紧凑列表
    geo.h
    geo.c
    geohash.h
    geohash.c
    geohash_helper.h
    geohash_helper.c // 存储地理位置信息
    siphash.c // 字典(hashtable)

    工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    crc64.h
    crc16.c
    crc64.c // 循环冗余校验码
    rand.h
    rand.c // 随机数
    sha1.h
    sha1.c // sha1加密算法
    sort.c // 排序
    util.h
    util.c // 工具
    pqsort.h
    pqsort.c // 部分快速算法
    bitops.c // 位操作
    debug.c
    debugmacro.h
    defrag.c // debug用的
    lzf.h
    lzfP.h
    lzf_c.c
    lzf_d.c // lzf压缩算法
    release.c
    help.h
    sparkline.h
    sparkline.c // 微线图
    endianconv.h
    endianconv.c // 大端与小端存储
    setproctitle.c // 修改进程名称

    封装类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    atomicvar.h // 封装的gcc内置原子操作函数
    zmalloc.h
    zmalloc.c // 封装的内存分配函数
    bio.h
    bio.c // 封装的io(background io)开启后台线程
    syncio.c // 同步io
    notify.c // 通知类
    object.c // 创建和释放redisObject对象
    pubsub.c // 发布订阅实现
    latency.h
    latency.c // 延迟类
    rio.h
    rio.c // redis定义的io
    slowlog.h
    slowlog.c
    hyperloglog.c // redis定义的日志类型

    测试

    1
    2
    3
    4
    memtest.c // 内存测试
    redis-benchmark.c // 性能测试
    testhelp.h // c风格小型测试框架
    redis-check-aof.c // aof测试

    数据操作

    1
    2
    3
    4
    5
    6
    7
    8
    aof.c // aof实现
    rdb.h
    rdb.c // rdb实现
    db.c // 数据库操作实现
    config.h
    config.c // 对配置文件的操作
    multi.c // 事务处理操作
    replication.c // 主从数据库复制操作实现

    平台兼容问题

    1
    2
    fmacros.h // 兼容mac
    solarisfixes.h // 兼容solaris

    redis基本信息

    1
    2
    version.h // redis版本信息
    asciilogo.h // redis logo

    redis核心功能

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    blocked.c // 阻塞实现
    childinfo.c // 持久化优化(管道)
    cluster.h
    cluster.c // redis集群实现
    evict.c // 内存淘汰机制
    expire.c // 过期机制
    redismodule.h
    module.c // 定义reids模块
    redis-trib.rb //
    scripting.c // redis脚本,使用lua解释器
    sentinel.c // 哨兵实现
    server.h
    server.c // 服务器端实现
    redis-cli.c // 客户端
    lazyfree.c // redis4.0新特性,解决Big Key(主要指定元素较多集合类型Key)删除的风险
    localtime.c // 时间实现函数

    其他

    1
    2
    3
    4
    lolwut5.c
    lolwut.c // 一个有趣的命令,redis的一个彩蛋
    mkreleasehdr.sh // 制作发布redis
    redisassert.h // 断言

    以上,列举了redis的所有源码文件,并给源码文件做了简单的功能说明

    参考文献

    文章作者: rack-leen
    文章链接: http://yoursite.com/2019/12/15/%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB/C/redis/redis%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB-%E5%BA%8F/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 rack-leen's blog
    打赏
    • 微信
    • 支付宝

    评论