最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis服務(wù)器的啟動(dòng)過(guò)程分析

 更新時(shí)間:2015年04月08日 09:39:41   投稿:junjie  
這篇文章主要介紹了Redis服務(wù)器的啟動(dòng)過(guò)程分析,本文講解了初始化Redis服務(wù)器全局配置、加載配置文件、初始化服務(wù)器、加載數(shù)據(jù)、開(kāi)始網(wǎng)絡(luò)監(jiān)聽(tīng)等內(nèi)容,需要的朋友可以參考下

本文將通過(guò)分析代碼來(lái)介紹Redis的啟動(dòng)過(guò)程,通過(guò)查看Redis 的啟動(dòng)腳本,得知Redis的啟動(dòng)時(shí)從Redis.c的main方法開(kāi)始的。Redis啟動(dòng)可以分為以下幾個(gè)步驟:

1.初始化Redis服務(wù)器全局配置
2.重置服務(wù)器Save參數(shù)(具體下文詳解)和加載配置文件
3.初始化服務(wù)器
4.加載數(shù)據(jù)庫(kù)
5.開(kāi)始網(wǎng)絡(luò)監(jiān)聽(tīng)

一,初始化Redis服務(wù)器全局配置。這一步驟主要是主要是根據(jù)Redis.h中設(shè)置的Static值來(lái)初始化Redis服務(wù)器配置,這里設(shè)置是Redis服務(wù)器的默認(rèn)配置。如:

·TCP Port,Redis Client的缺省Timeout;
·Redis缺省的數(shù)據(jù)庫(kù)數(shù)目;
·Redis Append 持久化方式的參數(shù)設(shè)置;
·Redis的所支持的各種數(shù)據(jù)結(jié)構(gòu)的缺省值的設(shè)置;
·Redis內(nèi)存Swap相關(guān)設(shè)置;
·Redis Master & Slave相關(guān)的配置;
·Redis Command Table初始化。

 二,加載配置文件:

這一步是通過(guò)讀取的配置文件來(lái)對(duì)Redis服務(wù)器進(jìn)行設(shè)置,將會(huì)覆蓋上一步的某些缺省設(shè)置。打開(kāi)下載下來(lái)的Redis源代碼,我們可以看到其根目錄下有一個(gè)默認(rèn)的配置文件redis.conf。需要注意的是,如果在啟動(dòng)Redis的時(shí)候沒(méi)有指定配置文件,則Redis服務(wù)器在啟動(dòng)的時(shí)候是不會(huì)加載這個(gè)默認(rèn)的配置文件進(jìn)行配置的。而且這個(gè)默認(rèn)的配置文件和第一步中得全局默認(rèn)缺省配置不盡相同,比如針對(duì)Redis的Append模式的數(shù)據(jù)保存策略的配置,redis.conf里面的設(shè)置是:

save 900 1 -------15分鐘內(nèi)一次更新
save 300 10 ------5分鐘內(nèi)10次更新
save 60 10000 ---1分鐘內(nèi)10000次更新。

而上一步里面的默認(rèn)缺省配置確實(shí):

save 60*60 1 -------一個(gè)小時(shí)內(nèi)1次更新
save 300 100 ------5分鐘內(nèi)100次更新
save 60 10000 ---1分鐘內(nèi)10000次更新。

因此我們?cè)趩?dòng)Redis的時(shí)候如果默認(rèn)配置不能滿足要求,則需要指明配置文件進(jìn)行配置。

三,初始化服務(wù)器:

初始化服務(wù)器是在initServer()方法中完成的,次方法利用上兩步設(shè)置的參數(shù)進(jìn)一步初始化服務(wù)器:

·創(chuàng)建用來(lái)維護(hù)clients和slaves的list
·創(chuàng)建共享對(duì)象。redisObject這個(gè)struct里有個(gè)變量叫做refcount,這個(gè)變量就是用來(lái)實(shí)現(xiàn)共享的。Redis的對(duì)象目前Redis只支持共享StringObject。Redis的共享對(duì)象有兩大類(lèi)比:第一類(lèi):Redis server的各種操作需要經(jīng)常用到的各類(lèi)對(duì)象,如:Redis Command的分隔符 "\r\n",用于Redis command的reply的"+OK\r\n"或者"-ERR\r\n"等對(duì)象,因?yàn)樵赗edis的各種操作這類(lèi)對(duì)象要被頻繁使用,所以就在啟動(dòng)Redis的時(shí)候創(chuàng)建好,然后共用這些對(duì)象,減少時(shí)間成本和空間成本;第二,類(lèi)的共享對(duì)象就是對(duì)應(yīng)于數(shù)字的StringObject,如:Set "olylakers1" 1234; Set "olylakes2" 1234;在Redis內(nèi)部,"olylakers1"和"olylakers2"這兩個(gè)key都指向由數(shù)字1234轉(zhuǎn)化的StringObject。這樣在海量數(shù)據(jù)和特定存儲(chǔ)內(nèi)容下,可以節(jié)省大量的內(nèi)存空間??捎猛ㄟ^(guò)REDIS_SHARED_INTEGERS這個(gè)參數(shù)來(lái)指定Redis啟動(dòng)的時(shí)候創(chuàng)建多少個(gè)第二類(lèi)共享對(duì)象,默認(rèn)的參數(shù)是10000,即創(chuàng)建的StrongObject個(gè)取值范圍是0-9999之間。

·創(chuàng)建Pub/Sub通道
·初始化網(wǎng)絡(luò)監(jiān)聽(tīng)EventLoop的相關(guān)內(nèi)容,如eventLoop,timeEvent,fileEvent等
·如果開(kāi)啟了VM,則初始化虛擬內(nèi)存相關(guān)的IO/Thread

四,加載數(shù)據(jù):

根據(jù)配置的不同,Redis加載數(shù)據(jù)的源也不一樣,如果在配置文件里設(shè)置了appendonly  yes(默認(rèn)是no),那么就從appendfile加載數(shù)據(jù),反之則從RedisDb加載數(shù)據(jù)

·從appendfile加載數(shù)據(jù):我們先來(lái)看一下appendfile的內(nèi)容是什么。下面的一條記錄摘取自appendfile:SET $9 olylakers $3 oly。很顯,appendfile保存的就是redis server接收到的各種命令,那么從appendfile加載數(shù)據(jù)就是redis server從appenfile里面讀取這些命令的記錄,然后重新把這些命令執(zhí)行一遍即可。需要注意的是,如果開(kāi)啟了VM,那么在從appendfile加載數(shù)據(jù)的時(shí)候可能要涉及swap操作。
·從redisdb加載數(shù)據(jù):如果沒(méi)有開(kāi)啟appendonly,那么則需要從db file加載數(shù)據(jù)到內(nèi)存,其過(guò)程是:
1.通過(guò)處理select命令,選擇DB
2.然后從db file讀取key和value
3.檢查key是否過(guò)期,如果過(guò)期則跳過(guò)這個(gè)key,如果不過(guò)期,則把數(shù)據(jù)Add到對(duì)應(yīng)的db的dict中
4.如果開(kāi)啟了VM,則從db file中l(wèi)oad數(shù)據(jù),也可能涉及到swap操作

五,開(kāi)始網(wǎng)絡(luò)監(jiān)聽(tīng):

Redis的網(wǎng)絡(luò)監(jiān)聽(tīng)沒(méi)有采用libevent等,而是自己實(shí)現(xiàn)了一套簡(jiǎn)單的機(jī)遇event驅(qū)動(dòng)的API,具體見(jiàn)ae.c。

相關(guān)文章

  • Redis分片集群的實(shí)現(xiàn)

    Redis分片集群的實(shí)現(xiàn)

    Redis 分片集群是一種將 Redis數(shù)據(jù)庫(kù)分散到多個(gè)節(jié)點(diǎn)上的方式,以提供更高的性能和可伸縮性,本文主要介紹了Redis分片集群的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Redis如何解決BigKey

    Redis如何解決BigKey

    在Redis的使用過(guò)程中,我們經(jīng)常會(huì)遇到BigKey, BigKey的大值會(huì)導(dǎo)致Redis內(nèi)存中產(chǎn)生大量不連續(xù)的碎片,降低內(nèi)存利用效率,本文主要介紹了Redis如何解決BigKey,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Ubuntu系統(tǒng)中Redis的安裝步驟及服務(wù)配置詳解

    Ubuntu系統(tǒng)中Redis的安裝步驟及服務(wù)配置詳解

    本文主要記錄了Ubuntu服務(wù)器中Redis服務(wù)的安裝使用,包括apt安裝和解壓縮編譯安裝兩種方式,并對(duì)安裝過(guò)程中可能出現(xiàn)的問(wèn)題、解決方案進(jìn)行說(shuō)明,以及在手動(dòng)安裝時(shí),服務(wù)器如何添加自定義服務(wù)的問(wèn)題,需要的朋友可以參考下
    2024-12-12
  • redis緩存存儲(chǔ)Session原理機(jī)制

    redis緩存存儲(chǔ)Session原理機(jī)制

    這篇文章主要為大家介紹了redis緩存存儲(chǔ)Session原理機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • redis實(shí)現(xiàn)紅鎖的示例代碼

    redis實(shí)現(xiàn)紅鎖的示例代碼

    在分布式系統(tǒng)中,實(shí)現(xiàn)一個(gè)可靠的鎖機(jī)制是非常重要的,本文主要介紹了redis實(shí)現(xiàn)紅鎖的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • 一起raid數(shù)據(jù)恢復(fù)及回遷成功的案例

    一起raid數(shù)據(jù)恢復(fù)及回遷成功的案例

    這篇文章主要介紹了一起raid數(shù)據(jù)恢復(fù)及回遷成功的案例,需要的朋友可以參考下
    2017-04-04
  • 用Redis實(shí)現(xiàn)微博關(guān)注關(guān)系

    用Redis實(shí)現(xiàn)微博關(guān)注關(guān)系

    在微博中,每一個(gè)用戶都會(huì)有一個(gè)關(guān)注列表,一個(gè)粉絲列表。用戶可以查看自己的關(guān)注,粉絲列表,也可以查看別人的關(guān)注,粉絲列表。并且,要展示列表里每個(gè)人與當(dāng)前查看者的關(guān)注狀態(tài)。
    2015-09-09
  • 關(guān)于Redis?bigkeys命令會(huì)阻塞問(wèn)題的解決

    關(guān)于Redis?bigkeys命令會(huì)阻塞問(wèn)題的解決

    這篇文章主要介紹了關(guān)于Redis?bigkeys命令會(huì)阻塞問(wèn)題的解決,今天分享一次Redis引發(fā)的線上事故,避免再次踩雷,實(shí)現(xiàn)快速入門(mén),需要的朋友可以參考下
    2023-03-03
  • Redis配置文件詳解

    Redis配置文件詳解

    這篇文章主要介紹了Redis配置文件詳解,本文詳細(xì)完整的用中文解釋了Redis配置文件中各種參數(shù)的作用和功能,需要的朋友可以參考下
    2015-04-04
  • Redis持久化解讀

    Redis持久化解讀

    Redis是一種內(nèi)存級(jí)數(shù)據(jù)庫(kù),提供高速讀寫(xiě)性能,但數(shù)據(jù)易失,它支持三種持久化方式:RDB(快照持久化)、AOF(追加文件持久化)和混合持久化,RDB通過(guò)快照將數(shù)據(jù)保存到磁盤(pán),AOF記錄所有寫(xiě)操作命令,混合持久化結(jié)合兩者優(yōu)點(diǎn)
    2025-01-01

最新評(píng)論

星子县| 南江县| 奉化市| 易门县| 陵川县| 元氏县| 锡林浩特市| 滨海县| 鞍山市| 游戏| 宜兰县| 喀喇| 萨嘎县| 林芝县| 扎囊县| 礼泉县| 马山县| 万年县| 巴彦淖尔市| 闽侯县| 昌图县| 铜川市| 昭平县| 九台市| 六枝特区| 广饶县| 平顶山市| 阿巴嘎旗| 崇信县| 黔西县| 沁源县| 南澳县| 河东区| 安义县| 都兰县| 福清市| 理塘县| 玉田县| 建瓯市| 大英县| 太白县|