【源码解析】Redis7.0解析(1)——总览

看了下github上redis的release,7.0.-rc1已经发布了,带来了一些break change,比如:多文件存储AOF,版本10的RDB文件等等。同时,引入了一些新特性和命令,做了大量的性能优化,bug修复。其中看起来比较有意思的是Redis Functions,扩展了Redis服务端脚本的功能,支持了Lua函数。

代码结构

Redis主要的功能代码在src目录下,我们展开目录查看。 在文件后,标注了文件大致对应的功能。

src
├── Makefile  # 构建系统的核心文件,定义了如何编译和链接程序
├── acl.c  # 访问控制列表(ACL)的实现
├── adlist.c  # 双向链表的实现
├── adlist.h  # 双向链表的头文件
├── ae.c  # Redis的事件驱动库
├── ae.h  # 事件驱动库的头文件
├── ae_epoll.c  # Linux的epoll事件驱动实现
├── ae_evport.c  # Solaris的Event Ports事件驱动实现
├── ae_kqueue.c  # BSD的kqueue事件驱动实现
├── ae_select.c  # 基于select的事件驱动实现
├── anet.c  # Redis的网络库
├── anet.h  # 网络库的头文件
├── aof.c  # AOF持久化的实现
├── asciilogo.h  # Redis的ASCII艺术logo
├── atomicvar.h  # 原子操作的实现
├── bio.c  # 后台I/O的实现
├── bio.h  # 后台I/O的头文件
├── bitops.c  # 位操作命令的实现
├── blocked.c  # 阻塞客户端的实现
├── call_reply.c  # 命令调用和回复的实现
├── call_reply.h  # 命令调用和回复的头文件
├── childinfo.c  # 子进程信息的实现
├── cli_common.c  # 命令行接口的公共部分实现
├── cli_common.h  # 命令行接口的公共部分头文件
├── cluster.c  # Redis集群的实现
├── cluster.h  # Redis集群的头文件
├── commands  # 命令的实现
├── commands.c  # 命令的实现
├── config.c  # 配置系统的实现
├── config.h  # 配置系统的头文件
├── connection.c  # 连接抽象的实现
├── connection.h  # 连接抽象的头文件
├── connhelpers.h  # 连接助手的头文件
├── crc16.c  # CRC16校验的实现
├── crc16_slottable.h  # CRC16槽表的头文件
├── crc64.c  # CRC64校验的实现
├── crc64.h  # CRC64校验的头文件
├── crcspeed.c  # CRC校验速度的测试
├── crcspeed.h  # CRC校验速度的头文件
├── db.c  # 数据库的实现
├── debug.c  # 调试命令的实现
├── debugmacro.h  # 调试宏的头文件
├── defrag.c  # 内存碎片整理的实现
├── dict.c  # 字典的实现
├── dict.h  # 字典的头文件
├── endianconv.c  # 端序转换的实现
├── endianconv.h  # 端序转换的头文件
├── eval.c  # EVAL命令的实现
├── evict.c  # 键空间淘汰策略的实现
├── expire.c  # 键过期机制的实现
├── fmacros.h  # 平台相关的宏
├── function_lua.c  # Lua函数的实现
├── functions.c  # 函数的实现
├── functions.h  # 函数的头文件
├── geo.c  # 地理位置命令的实现
├── geo.h  # 地理位置命令的头文件
├── geohash.c  # GeoHash算法的实现
├── geohash.h  # GeoHash算法的头文件
├── geohash_helper.c  # GeoHash助手的实现
├── geohash_helper.h  # GeoHash助手的头文件
├── help.h  # 帮助信息的头文件
├── hyperloglog.c  # HyperLogLog数据结构的实现
├── intset.c  # 整数集合的实现
├── intset.h  # 整数集合的头文件
├── latency.c  # 延迟监控的实现
├── latency.h  # 延迟监控的头文件
├── lazyfree.c  # 惰性释放的实现
├── listpack.c  # ListPack数据结构的实现
├── listpack.h  # ListPack数据结构的头文件
├── listpack_malloc.h  # ListPack内存分配的头文件
├── localtime.c  # 本地时间的实现
├── lolwut.c  # LOLWUT命令的实现
├── lolwut.h  # LOLWUT命令的头文件
├── lolwut5.c  # LOLWUT版本5的实现
├── lolwut6.c  # LOLWUT版本6的实现
├── lzf.h  # LZF压缩算法的头文件
├── lzfP.h  # LZF压缩算法的私有头文件
├── lzf_c.c  # LZF压缩算法的实现
├── lzf_d.c  # LZF解压算法的实现
├── memtest.c  # 内存测试的实现
├── mkreleasehdr.sh  # 生成发布头的脚本
├── module.c  # 模块系统的实现
├── modules  # 模块的实现
├── monotonic.c  # 单调时间的实现
├── monotonic.h  # 单调时间的头文件
├── mt19937-64.c  # MT19937随机数生成器的实现
├── mt19937-64.h  # MT19937随机数生成器的头文件
├── multi.c  # MULTI/EXEC事务的实现
├── networking.c  # 网络层的实现
├── notify.c  # 键空间通知的实现
├── object.c  # 对象系统的实现
├── pqsort.c  # 快速排序的实现
├── pqsort.h  # 快速排序的头文件
├── pubsub.c  # 发布/订阅的实现
├── quicklist.c  # QuickList数据结构的实现
├── quicklist.h  # QuickList数据结构的头文件
├── rand.c  # 随机数生成的实现
├── rand.h  # 随机数生成的头文件
├── rax.c  # Rax基数树的实现
├── rax.h  # Rax基数树的头文件
├── rax_malloc.h  # Rax内存分配的头文件
├── rdb.c  # RDB持久化的实现
├── rdb.h  # RDB持久化的头文件
├── redis-benchmark.c  # Redis性能测试工具的实现
├── redis-check-aof.c  # AOF检查工具的实现
├── redis-check-rdb.c  # RDB检查工具的实现
├── redis-cli.c  # Redis命令行接口的实现
├── redis-trib.rb  # Redis集群管理工具的实现
├── redisassert.c  # 断言的实现
├── redisassert.h  # 断言的头文件
├── redismodule.h  # Redis模块系统的头文件
├── release.c  # 发布信息的实现
├── replication.c  # 复制功能的实现
├── resp_parser.c  # RESP协议解析的实现
├── resp_parser.h  # RESP协议解析的头文件
├── rio.c  # RIO抽象的实现
├── rio.h  # RIO抽象的头文件
├── script.c  # 脚本系统的实现
├── script.h  # 脚本系统的头文件
├── script_lua.c  # Lua脚本的实现
├── script_lua.h  # Lua脚本的头文件
├── sds.c  # SDS字符串的实现
├── sds.h  # SDS字符串的头文件
├── sdsalloc.h  # SDS内存分配的头文件
├── sentinel.c  # Sentinel的实现
├── server.c  # 服务器主循环的实现
├── server.h  # 服务器主循环的头文件
├── setcpuaffinity.c  # CPU亲和性设置的实现
├── setproctitle.c  # 进程标题设置的实现
├── sha1.c  # SHA1哈希算法的实现
├── sha1.h  # SHA1哈希算法的头文件
├── sha256.c  # SHA256哈希算法的实现
├── sha256.h  # SHA256哈希算法的头文件
├── siphash.c  # SipHash算法的实现
├── slowlog.c  # 慢查询日志的实现
├── slowlog.h  # 慢查询日志的头文件
├── solarisfixes.h  # Solaris平台的修复
├── sort.c  # SORT命令的实现
├── sparkline.c  # Sparkline图形的实现
├── sparkline.h  # Sparkline图形的头文件
├── stream.h  # Stream数据结构的头文件
├── syncio.c  # 同步I/O的实现
├── syscheck.c  # 系统检查的实现
├── syscheck.h  # 系统检查的头文件
├── t_hash.c  # Hash类型的实现
├── t_list.c  # List类型的实现
├── t_set.c  # Set类型的实现
├── t_stream.c  # Stream类型的实现
├── t_string.c  # String类型的实现
├── t_zset.c  # Sorted Set类型的实现
├── testhelp.h  # 测试助手的头文件
├── timeout.c  # 超时处理的实现
├── tls.c  # TLS支持的实现
├── tracking.c  # 客户端追踪的实现
├── util.c  # 工具函数的实现
├── util.h  # 工具函数的头文件
├── valgrind.sup  # Valgrind的suppression文件
├── version.h  # 版本信息的头文件
├── ziplist.c  # ZipList数据结构的实现
├── ziplist.h  # ZipList数据结构的头文件
├── zipmap.c  # ZipMap数据结构的实现
├── zipmap.h  # ZipMap数据结构的头文件
├── zmalloc.c  # 内存管理的实现
└── zmalloc.h  # 内存管理的头文件

主要数据结构对应的文件