文档章节

Redis源码分析系列七:initServer下

强子1985
 强子1985
发布于 2013/10/18 01:13
字数 445
阅读 374
收藏 8

这个函数快到尾声了,一鼓作气!

if(aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL) == AE_ERR)
 {
        redisPanic("Can't create the serverCron time event.");
        exit(1);
    }

这个函数是创建时间事件。

这样的话,server->el的timeEventHead就链接了一个成员如下:

   /* typedef struct aeTimeEvent {
        long long id; / time event identifier.
        // 0
     
        long when_sec; / seconds /
        // 2013-10-18
        long when_ms; / milliseconds /
        // 00:28. 其实是比当前时间多一毫秒
     
        aeTimeProc *timeProc;
       //serverCron
     
        aeEventFinalizerProc *finalizerProc;
        //NULL
     
        void *clientData;
       //null
     
        struct aeTimeEvent *next;
   } aeTimeEvent;
   */

 

~~~~~~~~~~~~~~~~~~~~

下面是依次循环执行aeCreateFileEvent函数

这个函数调用了aeApiAddEvent,这个函数主要关注:

 if (epoll_ctl(state->epfd,op,fd,&ee) == -1) return -1;

这个函数执行完,server->el->apidata的epfd就有了各个server socket handle,

显然后面会通过epoll_wait来监听事件。

再回到 aeCreateFileEvent

 fe->mask |= mask;//设置readable标志
 
    if (mask & AE_READABLE) fe->rfileProc = proc;//设置读的操作函数
    if (mask & AE_WRITABLE) fe->wfileProc = proc;//这个不会执行

if (server.sofd > 0 && aeCreateFileEvent(server.el,server.sofd,AE_READABLE,
        acceptUnixHandler,NULL) == AE_ERR) redisPanic("Unrecoverable error creating server.sofd file event.");//这个不执行



/* Open the AOF file if needed. */
    if (server.aof_state == REDIS_AOF_ON)
 {
        server.aof_fd = open(server.aof_filename,
                               O_WRONLY|O_APPEND|O_CREAT,0644);
        if (server.aof_fd == -1)
  {
            redisLog(REDIS_WARNING, "Can't open the append-only file: %s",
                strerror(errno));
            exit(1);
        }
    }

//根据需要决定是否打开文件

 if (server.arch_bits == 32 && server.maxmemory == 0)
 {
        redisLog(REDIS_WARNING,"Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now.");
  server.maxmemory = 3072LL*(1024*1024); /* 3 GB */
        server.maxmemory_policy = REDIS_MAXMEMORY_NO_EVICTION;
    }

 

然后还剩下最后四个函数:

第一个函数:replicationScriptCacheInit();简单

第二个函数:scriptingInit();//这个是初始化LUA脚本,这个暂且忽略,后面在说明。

第三个函数: slowlogInit();简单,不解释。

第四个函数:bioInit();启动2个线程,暂时不研究,后续研究。

好累啊,去洗澡了,困!

PS:最近几天中断研究Redis,因项目需要,我需要花一个礼拜来研究Live555多媒体服务器,敬请关注。

© 著作权归作者所有

共有 人打赏支持
强子1985

强子1985

粉丝 887
博文 1208
码字总数 891094
作品 8
南京
架构师
私信 提问
Redis网络架构及单线程模型

最近略有闲暇时间,于是对Redis进行了一些学习,学习途径除了官方文档还有Redis源代码,我看的版本是2.8.13,Redis源码总行数不到5W行,不同组件拆分非常细致,阅读起来也很清晰。这篇博客主...

Float_Luuu
2016/05/20
1K
0
Redis源码分析系列五:initServer上

刚下班,吃了点饭,精神饱满,让我们继续分析initServer,这个函数还是很重要的。 ~~ int j; signal(SIGHUP, SIGIGN);//注册信号处理程序为忽略 signal(SIGPIPE, SIGIGN);//注册信号处理程序...

强子哥哥
2013/10/17
0
0
深入Redis内部-Redis 源码讲解

作者:nosqlfan on 星期一, 三月 7, 2011 · 评论本文 【阅读:4,036 次】 Redis 作为 NoSQL 数据库的杰出代表,一直广受关注,其轻量级的敏捷架构,向来有存储中的瑞士军刀之称。下面推荐的...

Dicky
2011/09/25
0
0
Redis源码分析系列六:initserver中

server.db = zmalloc(sizeof(redisDb)*server.dbnum); //开辟缓冲区 listenToPort(server.port,server.ipfd,&server.ipfd_count); 显然这个函数是监听端口 跟踪这个函数,进入,发现最终是掉...

强子哥哥
2013/10/17
0
0
分布式架构_Index

分布式设计与开发 CAP原理和最终一致性(Eventually Consistency) 分布式算法 [分布式Paxos算法] 分布式一致性Hash算法 轮循算法(Round Robin) Hash求余算法(Hash) 最少连接算法(Least C...

陶邦仁
2015/12/07
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

matlab-线性代数 根据二次型写矩阵

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclci=input(......

志成就
9分钟前
0
0
Linux常用命令(六)vi 命令

vi 命令 复制,光标所在的这一行 yy 复制,光标所在行开始向下的4行 4yy 粘贴 p 删除(剪切,用p粘贴),光标所在的这一行 dd 删除(剪切),光标所在行,向下2两行 2dd 从光标开始一直...

GritTan
29分钟前
1
0
nginx 找不到pid文件原因及解决办法

2.var/run/nginx.pid文件 首先 var/run这个目录是干嘛用的? 此文件夹包含描述系统启动以来系统信息的数据。此文件夹下的文件必须在启动过程初期清除(删除或归零)。程序可以在/var/run下有...

李佳顺
51分钟前
4
0
【scala】2.控制结构和函数

简介 在Java或者C++中,我们把表达式和语句看做两种不同的东西。表达式有值,而语句执行动作。 在Scala中,几乎所有构造出来的语法结构都是有值的。这个特性使得程序更加的精简,也更易读。 ...

Areya
55分钟前
4
0
Java中的并发工具类(CountDownLatch、CyclicBarrie、Exchanger)

在JDK的并发包里提供了很多有意思的并发工具类。CountDownLatch、CyclicBarrier和Semaphore 工具类提供了一种并发流程控制的手段,Exchanger 工具类则提供了在线程间交换数据的一种手段。 1....

孟飞阳
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部