源码文件简介
文件 |
功能 |
备注 |
adlist.h/adlist.c |
双向链表 |
|
ae.h/ae.c |
事件驱动 |
|
ae_epoll.c |
epoll接口, |
Linux下的IO接口 |
ae_kqueue.c |
kqueue接口 |
Freebsd |
ae_select.c |
select接口 |
Windows |
ae_evport.c |
event ports接口 |
Illumos(OpenSolaris的衍生版本) |
anet.h/ anet.c |
网络处理 |
为Server/Client通信的基础封装 |
aof.c |
AOF文件相关处理 |
|
asciilogo.h |
Redis的字符logo |
|
bio.h/ bio.c |
Background I/O 服务 |
|
bitops.c |
Bit操做函数 |
|
config.h/ config.c |
配置文件解析 |
|
crc64.c |
crc64算法 |
|
db.c |
DB处理 |
|
debug.c |
用于调试使用 |
|
dict.h/dict.c |
hash表 |
|
endianconv.h/endianconv.c |
大小端转换 |
|
fmacros.h |
用于Mac下的兼容性处理 |
|
help.h |
命令的提示信息 |
|
intset.h/intset.c |
转换为数字类型数据 |
|
lzf.h/lzf_c.c |
LZF压缩算法 |
用于本地数据库的保存 |
lzf_d.c |
LZF压缩算法 |
用于本地数据库的保存 |
lzfP.h |
LZF压缩算法 |
用于本地数据库的保存 |
memtest.c |
|
|
migrate.c |
DUMP, RESTORE and MIGRATE 命令 |
|
multi.c |
事务 |
|
networking.c |
读取、解析和处理客户端命令 |
网络协议传输方法定义 |
object.c |
各种对像的创建与销毁,string、list、set、zset、hash |
|
pqsort.h/pqsort.c |
排序算法 |
|
pubsub.c |
发布-订阅系统 |
|
rand.h/rand.c |
随机数产生 |
|
rdb.h/rdb.c |
redis数据文件处理 |
|
redisassert.h |
断言 |
|
redis-benchmark.c |
redis性能测试 |
|
redis-check-aof.c |
用于更新日志检查的实现 |
|
redis-check-dump.c |
用于本地数据库检查的实现 |
|
redis-cli.c |
客户端程序 |
|
redis.c |
redis的主文件 |
main函数 |
redis.h |
redis的主文件头 |
|
release.c |
用于发布使用 |
|
replication.c |
数据同步master-slave |
|
rio.h/rio.c |
Rio对象 |
|
scripting.c |
脚本 |
|
sds.h/sds.c |
动态字符串 |
|
sentinel.c |
警戒模式 |
|
sha1.h/sha1.c |
sha算法的实现 |
|
slowlog.h/slowlog.c |
慢日志 |
|
solarisfixes.h |
Solaris系统的兼容性实现 |
|
sort.c |
用于list、set、zset排序 |
|
syncio.c |
用于同步Socket和文件I/O操作 |
|
t_hash.c |
hash类型处理 |
|
t_list.c |
list类型处理 |
|
t_set.c |
set类型处理 |
|
t_string.c |
string类型处理 |
|
t_zset.c |
有序sort |
|
testhelp.h |
一个C风格的小型测试框架 |
|
util.h/util.c |
通用工具 |
|
version.h |
Redis版本号定义 |
|
ziplist.h/ziplist.c |
压缩列表 |
|
zipmap.h/zipmap.c |
压缩hash |
|
zmalloc.h/zmalloc.c |
内存管理 |
|
一、main()函数
zmalloc_enable_thread_safeness()打开内存分配线程安全标志,这个函数只有一句代码即zmalloc_thread_safe =1,zmalloc_thread_safe是zmalloc.c的一个静态变量,这个值为1的情况下,redis内存的申请、释放、使用都会加锁。
【注】此处值得一提的是,在i386CPU和AMD64CPU上,在GCC库版本号大于40100的情况下,会直接使用原子指令代替锁操作,原子指令时CPU层面的支持,无需内核锁对象介入,性能大大提高,redis针对系统环境和硬件进行效率优化。这个原子指令就是__sync_add_and_fetch,一个指令实现增加并获取一个值,熟悉汇编的人应该不陌生。
zmalloc_set_oom_handler(redisOutOfMemoryHandler);
设置内存分配失败后的回调函数,如果不主动设置回调函数,redis将会会记录文件“zmalloc:Out of memory trying to allocate xxxbytes”,并退出线程。在这里,redis没有使用默认处理方式,而是选择记录Log,并主动报告一个OMM错误。