【Redis設(shè)計和實現(xiàn)】二:RDB和AOF

RDB和AOF都是對服務(wù)器中所有數(shù)據(jù)庫而言的插龄,和redisDb一樣愿棋,是在redisServer結(jié)構(gòu)體下的同一層級。

RDB

由于redis是內(nèi)存型數(shù)據(jù)庫均牢,所以當(dāng)服務(wù)器進程意外終止時糠雨,數(shù)據(jù)庫中保存的信息將不會存在(比如使用redis管理會話信息的系統(tǒng),當(dāng)redis服務(wù)器宕機會導(dǎo)致所有用戶的會話信息丟失膨处,導(dǎo)致重新登陸或者其他的問題)见秤,為了防止這一問題,redis引入了RDB持久化真椿,將數(shù)據(jù)庫狀態(tài)信息保存在硬盤中鹃答,從而實現(xiàn)redis服務(wù)器宕機后能夠從硬盤中自動恢復(fù)大部分?jǐn)?shù)據(jù)。 RDB可以手動通過指令創(chuàng)建突硝,也可以通過配置使redis服務(wù)器定期自動更新RDB文件测摔。

1. 手動創(chuàng)建
手動創(chuàng)建可以使用BGSAVE和SAVE兩個命令,他們之間的區(qū)別在于前者是通過fork一個子進程來創(chuàng)建RDB文件,不會導(dǎo)致redis服務(wù)器阻塞從而不能處理任何請求锋八,需要注意的是浙于,RDB持久化命令只能有單例執(zhí)行,不能同時執(zhí)行兩個持久化命令挟纱,否則會被服務(wù)器拒絕羞酗。

2.自動創(chuàng)建
在save選項中配置如下信息:
save 60 100 這樣表示在60秒內(nèi)如果進行了100次改動則進行持久化,save配置可以配置多行紊服,多個持久化配置之間的關(guān)系是只要滿足其中的一個那么就進行持久化檀轨。

redis的這個保存參數(shù)很值得借鑒,我們可以同時實現(xiàn)對低頻和高頻操作的持久化欺嗤。

redis服務(wù)器通過維護一個dirty計數(shù)器和lastsave來記錄某個時間段內(nèi)修改了多少次参萄,這兩個參數(shù)和redisDb結(jié)構(gòu)體在同一層級,因此可以知道記錄的是整個redis所有的數(shù)據(jù)庫的修改煎饼。redis會自動維護一個時間差讹挎,每次檢查時都會將之前的時間差和現(xiàn)在的時間相加從而判斷是否達到了配置中指定的時間長度,如果達到則判斷dirty是否達到指定次數(shù)吆玖,兩者都達到則進行一次RDB持久化操作筒溃,同時將dirty值重置為0。

AOF文件

AOF是通過保存服務(wù)器收到的命令來記錄數(shù)據(jù)庫的狀態(tài)沾乘,通過將命令追加到文件中铡羡,在服務(wù)器啟動時在創(chuàng)建一個偽客戶端從AOF文件中讀取命令從而實現(xiàn)恢復(fù)服務(wù)器狀態(tài)。

AOF文件的寫入配置有appendfsync選項來決定意鲸,當(dāng)設(shè)置為always時,服務(wù)器都會將緩沖區(qū)中的指令寫入到AOF文件中尽爆,同事同步AOF文件怎顾,效率最低但是最安全;設(shè)置為everysec時漱贱,服務(wù)器同樣是每個事件循環(huán)時會將緩沖區(qū)中的內(nèi)容寫入到AOF文件中槐雾,但是是每隔一秒才會同步AOF文件,犧牲了一定的數(shù)據(jù)可用性幅狮,提高性能募强,比較折中的方案;設(shè)置為no時崇摄,該模式速度最快擎值,但是由于服務(wù)器不會主動去同步AOF文件,由操作系統(tǒng)來控制AOF文件的同步逐抑,所以可能會有很多條指令被保存在了系統(tǒng)緩存中鸠儿,當(dāng)服務(wù)器宕機時,這種方案損失的數(shù)據(jù)也是最多的。

AOF通過存指令來實現(xiàn)服務(wù)器狀態(tài)的恢復(fù)也是有一定的弊端的进每,比如汹粤,可能多條指令同時對一個鍵進行了更新,但是最后這個鍵對應(yīng)的數(shù)據(jù)被改來改去還是原來的樣子田晚,這樣就會導(dǎo)致AOF文件中存了很多不必要的指令嘱兼。

為了解決這個問題,redis采用了AOF文件重寫贤徒,當(dāng)開啟AOF重寫時芹壕,服務(wù)器會再創(chuàng)建一個AOF重寫緩沖區(qū)來保存執(zhí)行的指令,然后經(jīng)過分析后泞莉,合并無效的指令寫入到新的AOF文件中哪雕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鲫趁,隨后出現(xiàn)的幾起案子斯嚎,更是在濱河造成了極大的恐慌,老刑警劉巖挨厚,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堡僻,死亡現(xiàn)場離奇詭異,居然都是意外死亡疫剃,警方通過查閱死者的電腦和手機钉疫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巢价,“玉大人牲阁,你說我怎么就攤上這事∪蓝悖” “怎么了城菊?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碉克。 經(jīng)常有香客問我凌唬,道長,這世上最難降的妖魔是什么漏麦? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任客税,我火速辦了婚禮,結(jié)果婚禮上撕贞,老公的妹妹穿的比我還像新娘更耻。我一直安慰自己,他們只是感情好捏膨,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布酥夭。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熬北。 梳的紋絲不亂的頭發(fā)上疙描,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音讶隐,去河邊找鬼起胰。 笑死,一個胖子當(dāng)著我的面吹牛巫延,可吹牛的內(nèi)容都是我干的效五。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼炉峰,長吁一口氣:“原來是場噩夢啊……” “哼畏妖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疼阔,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤戒劫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后婆廊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迅细,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年淘邻,在試婚紗的時候發(fā)現(xiàn)自己被綠了茵典。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宾舅,死狀恐怖统阿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筹我,我是刑警寧澤砂吞,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站崎溃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盯质。R本人自食惡果不足惜袁串,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呼巷。 院中可真熱鬧囱修,春花似錦、人聲如沸王悍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鲜漩,卻和暖如春源譬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孕似。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工踩娘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喉祭。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓养渴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泛烙。 傳聞我的和親對象是個殘疾皇子理卑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容