Redis 相关笔记,简单介绍 Redis 代码组织结构,记录一些和 Redis 相关有趣的博文。
各个源码文件的作用简介
下表参考 Redis 3.0 源码注释,基于 Redis-6.0.8 源码版本进行相应修改。
| File Name | Meaning | |
|---|---|---|
acl.c |
Global state for ACLs | |
| Y | adlist.c, adlist.h |
双向链表数据结构的实现 |
ae_epoll.c, ae_evport.c, ae_kqueue.c, ae_select.c, ae.c, ae.h |
事件处理器,以及各个具体实现 | |
anet.c, anet.h |
Redis 的异步网络框架,内容主要为对 socket 库的包装 | |
| Y | aof.c |
AOF 功能的实现 |
asciilogo.h |
保存了 Redis 的 ASCII LOGO | |
atomicvar.h |
Implements atomic counters | |
bio.c, bio.h |
Redis 的后台 I/O 程序,用于将 I/O 操作放到子线程里面执行, 减少 I/O 操作对主线程的阻塞 | |
bitops.c |
二进制位操作命令的实现文件 | |
blocked.c |
用于实现 BLPOP 命令和 WAIT 命令的阻塞效果 | |
childinfo.c |
Child info | |
cluster.c, cluster.h |
Redis 的集群实现 | |
config.c, config.h |
Redis 的配置管理实现,负责读取并分析配置文件,然后根据这些配置修改 Redis 服务器的各个选项 | |
connection.c, connection.h, connhelpers.h |
Connection abstraction | |
crc16_slottable.h, crc16.c, crc64.c, crc64.h |
计算 CRC 校验和 | |
crcspeed.c, crcspeed.h |
||
| Y | db.c |
数据库实现 |
debug.c, debugmacro.h |
调试实现 | |
defrag.c |
||
| Y | dict.c, dict.h |
字典数据结构的实现 |
endianconv.c, endianconv.h |
二进制的大端、小端转换函数 | |
| Y | evict.c |
Maxmemory directive handling (LRU eviction and other policies). |
| Y | expire.c |
Implementation of EXPIRE (keys with fixed time to live). |
fmacros.h |
一些移植性方面的宏 | |
geo.c, geo.h, geohash_helper.c, geohash_helper.h, geohash.c, geohash.h |
||
gopher.c |
||
help.h |
utils/generate-command-help.rb 程序自动生成的命令帮助信息 |
|
hyperloglog.c |
HyperLogLog 数据结构的实现 | |
| Y | intset.c, intset.h |
整数集合数据结构的实现,用于优化整数 SET,以节省内存 |
latency.c, latency.h |
Latency monitor API 及其实现 | |
lazyfree.c |
||
listpack_malloc.h, listpack.c, listpack.h |
A lists of strings serialization format | |
localtime.c |
||
lolwut.c, lolwut.h, lolwut5.c, lolwut6.c |
||
lzf_c.c, lzf_d.c, lzf.h, lzfP.h |
Redis 对字符串和 RDB 文件进行压缩时使用的 LZF 压缩算法的实现 | |
Makefile |
构建文件 | |
memtest.c |
内存测试 | |
mkreleasehdr.sh |
用于生成释出信息的脚本 | |
module.c, redismodule.h |
Redis Module 接口及其实现 | |
multi.c |
Redis 的事务实现 | |
| Y | networking.c |
Redis 的客户端网络操作库, 用于实现命令请求接收、发送命令回复等工作,文件中的函数大多为 write, read,close 等函数的包装,以及各种协议的分析和构建函数。 |
notify.c |
Redis 的数据库通知实现 | |
| Y | object.c |
Redis 的对象系统实现 |
pqsort.c, pqsort.h |
快速排序 (QuickSort) 算法的实现 | |
pubsub.c |
发布与订阅功能的实现 | |
| Y | quicklist.c, quicklist.h |
A doubly linked list of ziplists |
rand.c, rand.h |
伪随机数生成器 | |
| Y | rax_malloc.h, rax.c, rax.h |
A radix tree implementation |
| Y | rdb.c, rdb.h |
RDB 持久化功能的实现 |
redis-benchmark.c |
Redis 的性能测试程序 | |
redis-check-aof.c, redis-check-dump.c |
RDB 文件和 AOF 文件的合法性检查程序 | |
redis-cli.c |
Redis 客户端的实现 | |
redis-trib.rb |
Redis 集群的管理程序 | |
redisassert.h |
Redis 自建的断言系统 | |
release.c |
记录和生成 Redis 的发行版本信息 | |
| Y | replication.c |
异步复制功能的实现 |
rio.c, rio.h |
Redis 对文件 I/O 函数的包装,在普通 I/O 函数的基础上增加了显式缓存、以及计算校验和等功能 | |
scripting.c |
脚本功能的实现 | |
| Y | sds.c, sds.h, sdsalloc.h |
SDS 数据结构的实现,SDS 为 Redis 的默认字符串表示 |
sentinel.c |
Redis Sentinel 的实现 | |
server.c |
负责服务器的启动、维护和关闭等事项 | |
server.h |
Redis 的主要头文件,记录了 Redis 中的大部分数据结构,包括服务器状态和客户端状态 | |
setcpuaffinity.c, setproctitle.c |
进程环境设置函数 | |
sha1.c, sha1.h |
SHA1 校验和计算函数 | |
sha256.c, sha256.h |
||
siphash.c |
Keys hashing functions for dict.c hash tables. |
|
slowlog.c, slowlog.h |
慢查询功能的实现 | |
solarisfixes.h |
针对 Solaris 系统的补丁 | |
sort.c |
SORT 命令的实现 | |
sparkline.c, sparkline.h |
ASCII graphs API 及其实现 | |
stream.h |
||
syncio.c |
同步 I/O 操作 | |
t_hash.c, t_list.c, t_set.c, t_stream.c, t_string.c, t_zset.c |
定义了 Redis 的各种数据类型,以及这些数据类型的命令 | |
testhelp.h |
测试辅助宏 | |
timeout.c |
Blocked clients timeout and connections timeout. | |
tls.c |
||
tracking.c |
||
util.c, util.h |
各种辅助函数 | |
valgrind.sup |
valgrind 的 suppression 文件 | |
version.h |
记录了 Redis 的版本号 | |
| Y | ziplist.c, ziplist.h |
Ziplist 数据结构的实现,用于优化 List 类型 |
zipmap.c, zipmap.h |
Zipmap 数据结构的实现,在 Redis 2.6 以前用于优化 Hash 类型,Redis 2.6 开始已经废弃 | |
| Y | zmalloc.c, zmalloc.h |
内存管理程序 |
博文
-
在本文中,介绍了服务器端接受数据包的流程以及 CPU 亲缘性和 NUMA 相关知识。