- 源码版本:5.0
- 图形工具:http://www.plantuml.com/plantuml/uml
- 时序图源码:
@startuml
group main
server.c -> setproctitle.c : spt_init():为函数setproctitle调用做初始化工作
server.c -> server.c : setlocale(LC_COLLATE,"");
server.c -> server.c : tzset();
server.c -> server.c : zmalloc_set_oom_handler(redisOutOfMemoryHandler);
server.c -> server.c : srand(time(NULL)^getpid());
server.c -> server.c : gettimeofday(&tv,NULL);
server.c -> server.c : dictSetHashFunctionSeed((uint8_t*)hashseed);
server.c -> server.c : initServerConfig() 初始化server对象
server.c -> config.c : loadServerConfig() 根据配置文件和命令行参数设置server
server.c -> server.c : 打印启动信息
server.c -> server.c : 根据配置决定是否后台进程启动
server.c -> server.c : initServer() 初始化服务器
group initServer
server.c -> server.c : setupSignalHandlers() 设置信号处理函数
server.c -> server.c : 根据配置决定是否开启系统日志
server.c -> server.c : 初始化server对象用到的的结构体:list、rax等
server.c -> server.c : createSharedObjects() 创建共享对象
server.c -> server.c : adjustOpenFilesLimit() 适配打开文件数限制
server.c -> ae.c : aeCreateEventLoop() 创建事件循环对象el
server.c -> server.c : listenToPort() 开启本地端口监听
group listenToPort
server.c -> anet.c : anetTcpServer()
group anetTcpServer
anet.c -> system : socket() 创建服务端socket
anet.c -> anet.c : anetSetReuseAddr() 设置地址重用
anet.c -> system : bind() 绑定本地地址
anet.c -> system : listen() 开始监听端口
end
server.c -> anet.c : anetNonBlock() 设置非阻塞监听
end
server.c -> server.c : 初始化默认的16个数据库对象
server.c -> evict.c : evictionPoolAlloc() 初始化内存淘汰池
server.c -> server.c : 初始化server的其他字段
server.c -> ae.c : aeCreateTimeEvent() 创建时间处理事件,处理函数为serverCron
server.c -> ae.c : aeCreateFileEvent() 绑定socket到el,监听读事件,处理函数为acceptTcpHandler
server.c -> server.c : 如果开启了AOF,则打开AOF文件
server.c -> cluster.c : clusterInit() 开启了集群能力,则进行集群初始化工作
server.c -> replication.c : replicationScriptCacheInit() 本分脚本缓存初始化
server.c -> script.c : scriptingInit() 脚本初始化
server.c -> slowlog.c : slowlogInit() 慢日志初始化
server.c -> latency.c : latencyMonitorInit() 延迟监控初始化
end
server.c -> server.c : 有必要则创建pid文件
server.c -> setproctitle.c : redisSetProcTitle() 设置进程名称
server.c -> server.c : redisAsciiArt() 打印logo
server.c -> server.c : 进行相关系统检查
server.c -> server.c : InitServerLast
group InitServerLast
server.c -> bio.c : 初始化后台线程
end
server.c -> server.c : loadDataFromDisk() 从磁盘加载数据
group loadDataFromDisk 优先加载aof,没有则加载rdb
server.c -> aof.c : loadAppendOnlyFile() 加载aof文件
server.c -> rdb.c : rdbLoad() 加载rdb文件
end
server.c -> cluster.c : verifyClusterConfigWithData() 如果是集群,进行集群配置验证
server.c -> ae.c : aeSetBeforeSleepProc() 设置休眠前处理函数beforeSleep
server.c -> ae.c : aeSetAfterSleepProc() 设置休眠后处理函数afterSleep
server.c -> ae.c : aeMain() 开始事件循环,正常启动后会一直循环
server.c -> ae.c : aeDeleteEventLoop() 删除事件循环,释放事件循环资源
end
@enduml
标签:初始化,ae,流程,end,Redis,server,源码,anet,group
From: https://www.cnblogs.com/zby9527/p/17726315.html