文章目录
- 一、数据结构
- 二、彩蛋
- 三、类型命令
- 四、事件循环
- 五、内存
- 六、持久化
- 七、crc算法
- 八、命令行
- 九、网络及IO
- 十、算法
- 十一、lua脚本
- 十二、分布式
- 十三、调试
- 十四、字符串
- 十五、监控
- 十六、服务器核心
我分析的主要是redis 8.0版本src目录下的110个c文件。因为文件太多,所以需要进行分类,未来才好重点研究、各个击破。我把源码中的c文件分为了16类,未来分类研究更加高效便捷。
一、数据结构
| 文件 | 功能 |
|---|---|
| adlist.c | 双向链表实现 |
| dict.c | 哈希表实现 |
| intset.c | 整数集合 |
| listpack.c | 实现listpack数据结构,用来代替ziplist |
| quicklist.c | 快速列表 |
| rax.c | 基数树 |
| sds.c | 简单动态字符串 |
| geo.c | 地理空间索引 |
| geohash.c | 地理空间索引 |
| geohash_helper.c | 地理空间索引 |
| hyperloglog.c | hyperloglog核心逻辑 |
| ziplist.c | 旧版底层数据结构 |
| zipmap.c | 旧版底层数据结构 |
二、彩蛋
| 文件 | 功能 |
|---|---|
| lolwut.c | 彩蛋 |
| lolwut5.c | 彩蛋 |
| lolwut6.c | 绘制Mandelbrot 集合或其他图案 |
比如第六版彩蛋是这样的:

三、类型命令
| 文件 | 功能 |
|---|---|
| t_stream.c | stream类型命令 |
| t_set.c | set类型命令 |
| t_list.c | list类型命令 |
| t_zset.c | zset类型命令 |
| t_hash.c | 哈希类型命令 |
| t_string.c | string类型命令 |
四、事件循环
| 文件 | 功能 |
|---|---|
| ae.c | 事件驱动循环 |
| ae_epoll.c | linux系统实现 |
| ae_evport.c | Solaris专用 |
| ae_kqueue.c | mac专用 |
| ae_select.c | 老旧linux使用 |
| ebuckets.c | 事件桶 |
| eventnotifier.c | 事件通讯器 |
五、内存
| 文件 | 功能 |
|---|---|
| defrag.c | 内存碎片整理 |
| evict.c | 内存淘汰策略 |
| expire.c | 过期键删除 |
| zmalloc.c | 内存管理 |
| memtest.c | 内存测试 |
六、持久化
| 文件 | 功能 |
|---|---|
| aof.c | aof持久化 |
| rdb.c | rdb快照 |
| redis-check-aof.c | aof修复工具 |
| redis-check-rdb.c | rdb修复工具 |
七、crc算法
| 文件 | 功能 |
|---|---|
| crc16.c | crc16校验算法 |
| crc64.c | crc64校验算法 |
| crccombine.c | CRC组合计算功能 |
| crcspeed.c | crc计算的功能优化 |
八、命令行
| 文件 | 功能 |
|---|---|
| cli_commands.c | 命令定义表 |
| cli_common.c | 命令行工具共用代码 |
| commands.c | redis命令表定义 |
| redis-cli.c | 命令行客户端 |
| sort.c | 排序命令 |
九、网络及IO
| 文件 | 功能 |
|---|---|
| anet.c | 封装网络函数 |
| resp_parser.c | 协议解析引擎 |
| call_reply.c | RESP3协议解析器 |
| networking.c | 网络与客户端管理 |
| tls.c | 传输层安全 |
| bio.c | 后台io服务 |
| blocked.c | 阻塞操作与客户端挂起管理 |
| connection.c | 连接抽象层 |
| rio.c | 基础io抽象层 |
| syncio.c | 同步IO |
| socket.c | 连接封装 |
| iothread.c | 多线程io模型 |
十、算法
| 文件 | 功能 |
|---|---|
| lzf_d.c | LZF算法解压 |
| lzf_c.c | LZF算法压缩 |
| sha1.c | 哈希算法 |
| sha256.c | 哈希算法 |
| siphash.c | 哈希函数 |
| pqsort.c | 并行快速排序 |
| mt19937-64.c | 高质量随机数 梅森旋转算法 |
| rand.c | 实现高质量的伪随机数生成器 |
十一、lua脚本
| 文件 | 功能 |
|---|---|
| function_lua.c | lua语言函数支持 |
| functions.c | lua函数的管理层 |
| script.c | 脚本管理 |
| script_lua.c | lua环境脚本 |
十二、分布式
| 文件 | 功能 |
|---|---|
| cluster.c | 分布式集群模式功能,实现gossip协议 |
| cluster_legacy.c | 保留了一些向后兼容的函数 |
| replication.c | 主从复制功能 |
| sentinel.c | 哨兵模式 |
十三、调试
| 文件 | 功能 |
|---|---|
| debug.c | 强制触发异常等调试功能 |
| redis-benchmark.c | 压力测试工具 |
| redisassert.c | 调试与断言 |
十四、字符串
| 文件 | 功能 |
|---|---|
| bitops.c | 字符串底层二进制处理 |
| mstr.c | 标准字符串的安全加固版 |
| strl.c | 安全字符串 |
十五、监控
| 文件 | 功能 |
|---|---|
| logreqres.c | 慢查询日志实现 |
| latency.c | 延迟监控 |
| slowlog.c | 慢查询日志 |
| sparkline.c | ascii图表 |
| tracking.c | 客户端缓存跟踪 |
| timeout.c | 超时管理 |
十六、服务器核心
| 文件 | 功能 |
|---|---|
| acl.c | 访问控制,redis 6.0新增 |
| childinfo.c | 父子进程通讯 |
| config.c | 处理redis配置文件 |
| db.c | 数据库核心逻辑 |
| endianconv.c | 字节序转换 |
| eval.c | 核心执行引擎 |
| kvstore.c | 键值存储抽象 |
| lazyfree.c | 用于解决大件删除的阻塞问题 |
| localtime.c | 获取本地时间 |
| module.c | 模块系统的核心 |
| monotonic.c | 单调时钟 |
| multi.c | 事务处理 |
| notify.c | 键空间通知 |
| object.c | 对象系统 |
| pubsub.c | 发布订阅 |
| release.c | 版本与构建信息 |
| server.c | 服务器核心 |
| setcpuaffinity.c | cpu亲和性 |
| setproctitle.c | 进程名修改 |
| syscheck.c | 系统检查 |
| threads_mngr.c | 线程管理 |
| unix.c | unix系统结构 |
| util.c | 通用工具 |