Redis 相关笔记,简单介绍 Redis 代码组织结构,记录一些和 Redis 相关有趣的博文。
各个源码文件的作用简介
下表参考 Redis 3.0 源码注释,基于 Redis-6.0.8 源码版本进行相应修改。
File Name | Meaning |
---|---|
acl.c |
Global state for ACLs |
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 库的包装 |
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 |
|
db.c |
数据库实现 |
debug.c , debugmacro.h |
调试实现 |
defrag.c |
|
dict.c , dict.h |
字典数据结构的实现 |
endianconv.c , endianconv.h |
二进制的大端、小端转换函数 |
evict.c |
Maxmemory directive handling (LRU eviction and other policies). |
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 数据结构的实现 |
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 的事务实现 |
networking.c |
Redis 的客户端网络操作库, 用于实现命令请求接收、发送命令回复等工作,文件中的函数大多为 write, read,close 等函数的包装,以及各种协议的分析和构建函数。 |
notify.c |
Redis 的数据库通知实现 |
object.c |
Redis 的对象系统实现 |
pqsort.c , pqsort.h |
快速排序 (QuickSort) 算法的实现 |
pubsub.c |
发布与订阅功能的实现 |
quicklist.c , quicklist.h |
A doubly linked list of ziplists |
rand.c , rand.h |
伪随机数生成器 |
rax_malloc.h , rax.c , rax.h |
A radix tree implementation |
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 的发行版本信息 |
replication.c |
异步复制功能的实现 |
rio.c , rio.h |
Redis 对文件 I/O 函数的包装,在普通 I/O 函数的基础上增加了显式缓存、以及计算校验和等功能 |
scripting.c |
脚本功能的实现 |
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 的版本号 |
ziplist.c , ziplist.h |
Ziplist 数据结构的实现,用于优化 List 类型 |
zipmap.c , zipmap.h |
Zipmap 数据结构的实现,在 Redis 2.6 以前用于优化 Hash 类型,Redis 2.6 开始已经废弃 |
zmalloc.c , zmalloc.h |
内存管理程序 |
博文
-
在本文中,介绍了服务器端接受数据包的流程以及 CPU 亲缘性和 NUMA 相关知识。
-
Codis 是一个基于 Proxy 的 Redis 集群化方案,本文简单介绍了 Codis 相关知识。