redis啟動過程

來源:互聯網
上載者:User

標籤:nts   conf   max   block   訊息   void   啟動過程   char   ESS   

一. 入口
int main(int argc, char **argv)

二. main()處理
1. server配製初始化
 //各種配製初始化
 void initServerConfig(void)
    //redis命令初始化, server.commands就是在這裡初始化的
    populateCommandTable(void)

2. 載入配製
 //載入配製檔案
 void loadServerConfig(char *filename, char *options)
    //載入配製上面方法產生的配製字串
    loadServerConfigFromString(char *config)

3. server初始化
 void initServer(void)
    //通知訊息待用資料初始化
    createSharedObjects()  
    //最大可開啟檔案設定
    adjustOpenFilesLimit()  
    //事件監聽器
    server.el = aeCreateEventLoop(server.maxclients+CONFIG_FDSET_INCR);
    //db記憶體初始化
       server.db = zmalloc(sizeof(redisDb)*server.dbnum);
    //tcp監聽連接埠初始化            
    listenToPort(server.port,server.ipfd,&server.ipfd_count)
    server.sofd = anetUnixServer(server.neterr,server. server.unixsocketperm, server.tcp_backlog)
    db初始化:

  /* Create the Redis databases, and initialize other internal state. */    for (j = 0; j < server.dbnum; j++) {        server.db[j].dict = dictCreate(&dbDictType,NULL);        server.db[j].expires = dictCreate(&keyptrDictType,NULL);        server.db[j].blocking_keys = dictCreate(&keylistDictType,NULL);        server.db[j].ready_keys = dictCreate(&setDictType,NULL);        server.db[j].watched_keys = dictCreate(&keylistDictType,NULL);        server.db[j].eviction_pool = evictionPoolAlloc();        server.db[j].id = j;        server.db[j].avg_ttl = 0;    }

    
    計劃任務和監聽事件初始化:   

  /* Create the serverCron() time event, that‘s our main way to process     * background operations. */    if(aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL) == AE_ERR) {        serverPanic("Can‘t create the serverCron time event.");        exit(1);    }    /* Create an event handler for accepting new connections in TCP and Unix     * domain sockets. */    for (j = 0; j < server.ipfd_count; j++) {        if (aeCreateFileEvent(server.el, server.ipfd[j], AE_READABLE,            acceptTcpHandler,NULL) == AE_ERR)            {                serverPanic(                    "Unrecoverable error creating server.ipfd file event.");            }    }    if (server.sofd > 0 && aeCreateFileEvent(server.el,server.sofd,AE_READABLE,        acceptUnixHandler,NULL) == AE_ERR) serverPanic("Unrecoverable error creating server.sofd file event.");

 

4. 載入資料
 loadDataFromDisk()


5. server開啟
 aeSetBeforeSleepProc(server.el,beforeSleep);
 //網路事件監聽器啟動
    aeMain(server.el);
    aeDeleteEventLoop(server.el);

 

redis啟動過程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.