【源码解析】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 # 内存管理的头文件
主要数据结构对应的文件
- String(t_string.c,sds.c,bitops.c)
- List(t_list.c,ziplist.c)
- Hash(t_hash.c,ziplist.c,dict.c)
- Set(t_set.c,intset.c)
- Sorted Set(t_zset.c,ziplist.c,dict.c)
- HyperLogLog(hyperloglog.c)
- Geo(geo.c,geohash.c,geohash_helper.c)
- Stream(t_stream.c,rax.c,listpack.c)