Redis 6.2.1源码结构
最近在看Redis 6.2.1的源码,现把Redis源文件目录中各文件实现的功能作一个整理和简要说明(按文件名排序),如有错漏之处请在留言。 文件名简要说明acl.cACL(Access Control List) 权限控制adlist.c数据结构链表的实现adlist.h数据结构链表的APIae.c简单的事件驱动模块实现ae.h简单的事件驱动模块APIae_epoll.c使用epoll模型来做事件驱动,用于Linux,为Linux下高效模型ae_evport.c使用evport模型来做事件驱动,用于Solaris,为Solaris下高效模型ae_kqueue.c使用kqueue模型来做事件驱动,用于macae_select.c使用select模型来做事件驱动,用于各系统,select模型是非常低效的模型,目前Windows下默认使用select模型,还未支持IOCPanet.c基本的网络Socket操作anet.h基本的网络Socket操作APIaof.cAOF(append only file)用于记录写操作以及数据恢复asciilogo.h代码内嵌的Redis Logo,由于该Logo都是由Ascii编码组成,所以为asciilogoatomicvar.h变量的原子操作,使用C11实现bio.cBackground I/O,即后台IO操作,专门启动了一个后台线程来处理bio.h后台IO操作APIbitops.c位操作模块blocked.c阻塞操作支持模块,类似BLPOP与WAITchildinfo.c管道(pipe)操作,用于RDB / AOF保存时的通信cli_common.cCLI (command line interface)命令行接口基础函数cli_common.hCLI (command line interface)命令行接口基础函数或者结构cluster.c集群实现模块cluster.h集群APIconfig.c配置参数处理config.h配置参数处理connection.c网络连接模块connection.h网络连接APIconnhelpers.h网络连接辅助函数crc16.c计算CRC16crc16_slottable.hCRC16映射的最短字母数字字符串表crc64.c计算CRC64crc64.hCRC64 APIcrcspeed.c生成CRC16以及CRC64的表,用于快速计算CRC16或者CRC64crcspeed.h生成CRC16以及CRC64表的APIdb.c数据/数据库操作debug.c调试模块debugmacro.h用于调试模块的宏defrag.c活跃内存的碎片整理dict.c字典实现模块dict.h字典APIendianconv.c字节序转换模块endianconv.h字节充转换APIevict.c最近最少使用LRU(Least Recently Used)剔除策略expire.c数据过期处理模块fmacros.h一些宏定义geo.c地理位置信息模块geo.h地理位置信息结构geohash.c地理位置Hash编码geohash.h地理位置Hash编码APIgeohash_helper.c地理位置Hash编码辅助函数geohash_helper.h地理位置Hash编码辅助函数gopher.cGopher协议处理help.h命令格式帮助,使用./utils/generate-command-help.rb生成hyperloglog.c基数统计模块,用于统计给定一组数据的基数,比如{1,2,2,3,4,5,5}的基数为5,即{1,2,3,4,5}intset.c整数集合处理,Redis会根据数据类型分配16位,32位以及64位的整数,当数据超过表示范围时,Redis会自动进行升级(升级后不能降级)intset.h整数集合处理APIlatency.c延迟监控latency.h延迟监控APIlazyfree.c惰性释放内存listpack.c压缩list数据结构listpack.h压缩list数据结构APIlistpack_malloc.h压缩list数据结构内存分配器localtime.c日期时间相关函数lolwut.cLOLWUT命令处理,该命令随机生成一系列字符串。不同的Redis版本可能会有不同的表现。lolwut.hLOLWUT命令的APIlolwut5.cLOLWUT命令实现版本lolwut6.cLOLWUT命令实现版本lzf.hlzf压缩算法APIlzfP.hlzf压缩算法宏定义lzf_c.clzf压缩算法的压缩函数实现lzf_d.clzf压缩算法的解压函数实现memtest.c内存测试module.cRedis模块功能monotonic.c时钟处理monotonic.h时钟处理APImt19937-64.c64位版本的Mersenne扭转伪随机数mt19937-64.h64位版本的Mersenne扭转伪随机数APImulti.cRedis事务开始指令multi的处理模块networking.c网络处理notify.c键值事件通知,主要用于发布/订阅object.cRedis对象操作pqsort.c部分排序pqsort.h部分排序APIpubsub.c发布与订阅quicklist.c快速链表,也是一个双向链表quicklist.h快速链表APIrand.c伪随机数rand.h伪随机数APIrax.c基数树(radix tree)算法实现rax.h基数树(radix tree)APIrax_malloc.h基数树(radix tree)算法内存分配器rdb.cRedis数据库rdb.hRedis数据库APIredis-benchmark.cRedis性能测试redis-check-aof.cRedis Aof(append only file)文件检测redis-check-rdb.cRedis数据库文件检测redis-cli.cRedis命令行接口redisassert.hRedis Assert断言函数redismodule.hRedis模块功能APIrelease.cRedis版本发布的版本号相关函数release.hRedis版本发布相关宏replication.cRedis异步复制rio.cRedis IO操作rio.hRedis IO操作APIscripting.cLua脚本支持sds.c动态字符串sds.h动态字符串APIsdsalloc.h动态字符串内存分配器sentinel.c哨兵模式实现server.cRedis服务器主逻辑,入口所在server.hRedis的一些数据结构定义以及服务器逻辑APIsetcpuaffinity.c设置CPU关联,即可以指定Redis在哪些CPU核心中运行,仅用于Linux/BSDsetproctitle.c设置进程标题,仅用于Linux/Darwinsha1.cSHA1算法sha1.hSHA1算法APIsha256.cSHA256算法sha256.hSHA256算法APIsiphash.cSipHash算法,该算法可以防止Hash洪水攻击slowlog.c慢查询日志slowlog.h慢查询日志APIsolarisfixes.hSolaris兼容sort.c排序功能sparkline.c使用ASCII编码绘制的走势图sparkline.h走势图APIstream.hstream消息队列中间件APIsyncio.c同步IO实现testhelp.h小型的C测试框架宏定义timeout.c超时处理tls.c使用OpenSSL实现的传输层安全(Transport Layer Security)tracking.c数据跟踪和失效,用于客户端缓存t_hash.cHash相关操作t_list.c链表相关操作t_set.c集合相关操作t_stream.cstream消息队列中间件相关操作t_string.c字符串相关操作t_zset.c有序集合相关操作util.c一些实用的辅助函数util.h辅助函数APIversion.hRedis版本号定义ziplist.c与Listpack类似的另一种压缩链表实现ziplist.h另一种压缩链表实现zipmap.c一种键值映射算法zipmap.h键值映射算法APIzmalloc.c内存分配器zmalloc.h内存分配器API
Redis支持的主要数据类型为List(链表)、String(字符串)、Set(集合)、ZSet(有序集合)。但是内部或者底层使用的数据结构则比较丰富,有:
- sds
- adlist
- quicklist
- skiplist
- listpack
- ziplist
- dict
- intset
- siphash
- zipmap
- radix tree
- HyperLogLog
- geo
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2021/2021-04-25-Redis-6.2.1源码结构/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。