欢迎来到天天文库
浏览记录
ID:42624290
大小:285.53 KB
页数:12页
时间:2019-09-19
《Redis启动过程详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Redis启动过程Redis的启动也就是main函数的执行。Redis的主main(程序的入口)在redis.c中。Redis启动流程:1.初始化库和默认服务器配置,如果是sentinel模式还需进行额外的配置。2.修改配置文件或配置选项这其中包括处理诸如-h/--help,-v/--version,--test-memory的特殊选项,获取给定的配置文件,设定的配置选项,然后取得配置文件的绝对路径,重置保存条件,载入配置文件。3.对服务器进行设置具体的包括:设置服务器为守护进程,创建并初始化服务器中的数据结构(inits
2、erver函数)(集群模式),为服务器进程设置名字,打印ASCIILOGO等4.检查maxmemory配置,运行事件处理器,监听事件。一、初始化过程具体的:首先执行下述语句:#ifdefINIT_SETPROCTITLE_REPLACEMENTspt_init(argc,argv);#endif其中INIT_SETPROCTITLE_REPLACEMENT的定义config.h中/*Checkifwecanusesetproctitle().*BSDsystemshavesupportforit,weprovideanim
3、plementationfor*Linuxandosx.*/#if(defined__NetBSD__
4、
5、defined__FreeBSD__
6、
7、defined__OpenBSD__)#defineUSE_SETPROCTITLE#endif#if(defined__linux
8、
9、defined__APPLE__)#defineUSE_SETPROCTITLE#defineINIT_SETPROCTITLE_REPLACEMENTvoidspt_init(intargc,char*argv[]);voidsetprocti
10、tle(constchar*fmt,...);#endif由于BSD系统已经支持该功能,而Linux和APPLE不支持。所以上述代码实现了对Linux和OSX的该功能的扩展。接下来的语句是:setlocale(LC_COLLATE,"");系统调用,用来配置本地化信息。//zmalloc需要的一些配置zmalloc_enable_thread_safeness();zmalloc_set_oom_handler(redisOutOfMemoryHandler);srand(time(NULL)^getpid());//设置
11、随机种子gettimeofday(&tv,NULL);//获取当前日期dictSetHashFunctionSeed(tv.tv_sec^tv.tv_usec^getpid());//设置哈希函数需要使用的随机种子服务器的启动模式:单机模式、Cluster模式、sentinel模式,详细介绍见《Redis设计与实现》第二版的第十四章、第十六章和第十七章。//初始化服务器配置initServerConfig();在该函数中除了进行属性的初始化外,主要初始化了命令表。调用了函数populateCommandTable,将命令集
12、分布到一个hashtable中。避免使用if分支来做命令处理的效率底下问题,而放到hashtable中,在理想的情况下只需一次就能定位命令的处理函数。initServerConfig()功能详细介绍:初始化服务器的状态,初始化LRU时间,设置保存条件,初始化和复制相关的状态,初始化PSYNC命令使用的backlog(回溯),设置客户端的输出缓冲区限制,初始化浮点常量,初始化命令表,初始化慢查询日志,初始化调试项。命令的执行:initServerConfig()函数中涉及命令表的相关源码如下:voidinitServerCo
13、nfig(){……server.commands=dictCreate(&commandTableDictType,NULL);server.orig_commands=dictCreate(&commandTableDictType,NULL);populateCommandTable();server.delCommand=lookupCommandByCString("del");server.multiCommand=lookupCommandByCString("multi");server.lpushComma
14、nd=lookupCommandByCString("lpush");server.lpopCommand=lookupCommandByCString("lpop");server.rpopCommand=lookupCommandByCString("rpop");……}//1server.comm
此文档下载收益归作者所有