Redis启动过程详解

Redis启动过程详解

ID:42624290

大小:285.53 KB

页数:12页

时间:2019-09-19

Redis启动过程详解_第1页
Redis启动过程详解_第2页
Redis启动过程详解_第3页
Redis启动过程详解_第4页
Redis启动过程详解_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。