FIELD NOTES / 技术札记
redis 知识总结
Redis 用过很久了,重新梳理下~
官方介绍: Redis 取自 Remote Dictionary Server.
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
源码
查看 Github 源码
源码结构
以 redis 8.0 分析
.codespell代码拼写检查.githubgithub 相关ISSUE_TEMPLATEissue 模板workflowsgithub actions 配置文件
depsdependencies 三方依赖fast_float高性能的浮点数解析库,用于将字符串高效解析为浮点数fpconv浮点数到字符串转换工具,优化性能hdr_histogram高效的数据结构和工具库,用于记录和分析具有极高动态范围的数值分布hiredisc 语言客户端jemalloc高性能内存分配器,在性能和内存碎片控制方面表现良好linenoise轻量级的行编辑库,用于实现 Redis CLI 的交互功能luaLua 解释器,支持服务器端脚本功能
modules模块相关代码,Redis 的一个重要扩展机制,允许开发者以插件的形式扩展 Redis 的功能,而无需修改核心代码redisbloom布隆过滤器redisearch高性能的全文搜索引擎,了解不多,后续有机会尝试 TODOredisjson提供对JSON数据的原生支持redistimeseries开源的时序数据数据库
src核心目录commands关于 Redis 命令和所有关于它们的元数据,可以通过 COMMAND 命令获取modules实现 Redis module 的示例代码acl.c用户权限管理adlist.c/adlist.h一个通用的双链表实现ae.c/ae.h一个简单的事件驱动编程库,针对不同系统平台,需要使用不同的IO多路复用函数ae_epoll.c基于 ae.c 实现的 epoll(IO多路复用)ae_evport.c基于 ae.c 实现的 eport(IO多路复用)ae_kqueue.c基于 ae.c 实现的 kqueue(IO多路复用)ae_select.c基于 ae.c 实现的 select(IO多路复用)anet.c/anet.h一个更加简单的使用 POSIX 网络标准库(相较于内核提供的原生接口)aof.cAOF支持,将客户端执行的命令追加到 AOF 文件中asciilogo.hASCII 码的 logoatomicvar.h原子计数器bio.c/bio.hBackground I/O service,该机制用于处理 Redis 的后台任务(如AOF-Append Only File、RDB-Redis Database持久化等),从而避免这些操作阻塞主线程,提高系统的响应性和并发性bitops.cBit operationsblocked.c支持阻塞操作call_reply.c/call_reply.h负责命令响应childinfo.ccli_command.c/cli_command.hredis cli 使用cli_common.c/cli_common.hcli 通用方法cluster.c/cluster.hredis 集群实现cluster_legacy.c/cluster_legacy.hredis 集群API实现commands.c/commands.def/commands.h命令相关,def文件由 generate-command-code.py 生成config.c/config.h配置文件获取、配置命令实现connection.c/connection.h/connhelpers.hconnection layer frameworkRedis 从 6.0 版本开始引入了连接层框架(Connection Layer Framework)。这个框架为 Redis 的网络层实现带来了更多的灵活性和扩展性,允许开发者更容易地为 Redis 集成自定义的协议或者进行网络相关的扩展。
crc16.c/crc16_slottable.hCRC16(Cyclic Redundancy Check 16)校验算法,用于集群槽位计算crc64.c/crc64.hCRC64(Cyclic Redundancy Check 64)校验算法,用于 RDB/AOF 文件校验数据完整性crcspeed.c/crcspeed.h加速 CRC 计算db.cRDB 数据库实现debug.c/debugmacro.h调试实现defrag.c内存碎片整理dict.c/dict.hhash table 实现ebuckets.c/ebuckets.hebuckets用于存储设置了过期时间的项目,支持添加、删除和活动过期的基本APIendianconv.c/endianconv.h大小字节序转换eval.c负责 Lua 脚本执行evict.cMaxmemory指令处理(LRU驱逐和其他策略)expire.cImplementation of EXPIRE (keys with fixed time to live)fmacros.h跨平台的功能宏定义fmtargs.h参数格式化function_lua.c/functions.c/functions.hLua 脚本引擎,实现与 Redis Functions 相关的逻辑geo.c/geo.h/geohash.c/geohash.h/geohash_helper.c/geohash_helper.hgeo 实现hyperloglog.chyperloglog 实现intset.c/intset.h整数集合数据结构的实现,用于优化整数 SET,以节省内存iothread.cIO 多线程实现kvstore.c/kvstore.h*基于索引的 kv 存储实现`latency.c/latency.hLatency monitor API 及其实现lazyfree.c惰性删除实现listpack.c/listpack.h/listpack_malloc.h一种用于向后遍历字符串列表的序列化格式和实现localtime.c时间时区处理logreqres.c实现了将客户端的请求和响应记录到文件中的接口lolwut.c/lolwut.h/lolwut5.c/lolwut6.clolwut API 及其实现~lzf.h/lzfP.h/lzf_c.c/lzf_d.c对字符串和 RDB 文件进行压缩时使用的 LZF 压缩算法的实现memtest.c测试内存读写正确性和稳定性,检测系统内存是否存在错误mkreleasehdr.h生成与发布版本相关的头文件module.credis module 实现monotonic.c/monotonic.h获取单调时间mstr.c/mstr.h数据类型 string 的实现mt19937-64.c/mt19937-64.hMersenne Twister 64 位版本(MT19937-64)实现(伪随机数生成器)multi.c事务实现networking.c客户端网络操作库, 用于实现命令请求接收、发送命令回复等工作,文件中的函数大多为 write, read,close 等函数的包装,以及各种协议的分析和构建函数notify.c实现通知机制,处理与发布订阅(Pub/Sub)相关的操作以及键的过期和其他通知事件object.c关键文件,负责 Redis 中各种数据类型对象的管理和处理pqsort.c修改后的 NetBSD-libc-qsort 实现,以支持Redis范围的部分排序pubsub.c发布订阅(Pub/Sub)实现quicklist.c/quicklist.hA doubly linked list of listpacksrand.c/rand.h伪随机数生成器rax.c/rax.h/rax_malloc.hA radix tree implementationrdb.c/rdb.hRDB 持久化实现redis-benchmark.c性能测试redis-check-aof.cAOF 文件合法性检查redis-check-rdb.cRDB 文件合法性检查redis-cli.credis cliredis-trib.rbRedis集群管理的Ruby脚本工具,用于创建、检查、修复和删除集群redisassert.c/redisassert.hredis 的断言redismodule.hredis module 接口release.c记录和生成 Redis 的发行版本信息replication.c异步复制实现resp_parser.c/resp_parser.h处理 RESP (REdis Serialization Protocol) 协议,解析和处理客户端请求的 RESP 消息格式rio.c/rio.h对文件 I/O 函数的包装,在普通 I/O 函数的基础上增加了显式缓存、以及计算校验和等功能script.c/script.hLua 脚本 执行相关的核心文件之一script_lua.c/script_lua.hLua 脚本执行相关的核心文件之一,通常与 script.c 文件共同工作来实现 Lua 脚本的加载、执行、缓存管理以及错误处理等功能sds.c/sds.h/sdsalloc.hA C dynamic strings librarysentinel.credis 哨兵实现server.c/server.h负责服务器的启动、维护和关闭等事项setcpuaffinity.c/setproctitle.c进程环境设置sha1.c/sha1.hSHA1 校验和计算sha256.c/sha256.hSHA256 校验和计算siphash.csiphash 实现slowlog.c/slowlog.hslowlog 慢查询 API 及其实现socket.c负责处理 Redis 服务器与客户端之间的网络通信solarisfixes.c针对 Solaris 系统的补丁sort.csort 命令实现sparkline.c/sparkline.hASCII sparkline 图表stream.hRedis Stream 结构体与接口定义strl.c字符串处理操作syncio.c同步socket和文件io处理syscheck.c/syscheck.h系统检查t_hash.cRedis Hash 数据结构t_list.cRedis List 数据结构t_set.cRedis Set 数据结构t_stream.cRedis Stream 数据结构t_string.cRedis String 数据结构t_zset.cRedis Zset 数据结构testhelp.c测试辅助宏threads_mngr.c/threads_mngr.h实现与多线程管理相关的功能。Redis 自 6.0 版本开始引入了多线程支持,用于提高某些操作(例如 I/O 操作)的性能timeout.c连接超时、请求超时、以及相关超时机制的管理tls.cTLS/SSL(传输层安全协议)相关功能tracking.cClient side caching: keys tracking and invalidationunix.cunix socket connection implementationutil.c/util.h辅助函数valgrind.supValgrind 抑制文件(suppressions file),用于屏蔽 Valgrind 工具报告的一些特定的、已知的内存使用警告version.h记录 Redis 版本号ziplist.c/ziplist.hZiplist 数据结构的实现zipmap.c/zipmap.hZipmap 数据结构的实现zmalloc.c/zmalloc.htotal amount of allocated memory aware version of malloc()crccombine.c/crccombine.hCRC 计算用eventnotifier.c/eventnotifier.hAn event notifier based on eventfd or pipeiothread.cThe threaded io implementation
tests测试相关utils工具脚本等