Redis的持久化存儲(chǔ)方式

前言

Redis是一種高級(jí)key-value數(shù)據(jù)庫(kù)畦浓。Redis為了保證效率痹束,數(shù)據(jù)緩存在內(nèi)存中,但是為了保證數(shù)據(jù)可靠性宅粥,Redis也支持將內(nèi)存中的數(shù)據(jù)同步到磁盤保證持久化参袱。

Redis支持兩種數(shù)據(jù)持久化方式:RDB方式和AOF方式。前者會(huì)根據(jù)配置的規(guī)則定時(shí)將內(nèi)存中的數(shù)據(jù)寫入到磁盤秽梅,后者則是以追加寫的方式將修改刪除操作寫入到記錄文件中。兩種持久化方式可以單獨(dú)使用剿牺,但是通常會(huì)將兩者結(jié)合使用企垦。

Redis的持久化策略:2種

  • RDB:快照形式是直接把內(nèi)存中的數(shù)據(jù)保存到一個(gè) dump 文件中,定時(shí)保存晒来,Redis的默認(rèn)保存策略钞诡。
  • AOF:把所有的對(duì)Redis的服務(wù)器進(jìn)行修改的命令都存到一個(gè)文件里,命令的集合湃崩。

Redis默認(rèn)只開(kāi)啟快照RDB的持久化方式荧降。

當(dāng) Redis 重啟時(shí),它會(huì)優(yōu)先使用 AOF 文件來(lái)還原數(shù)據(jù)集攒读,因?yàn)?AOF 文件保存的數(shù)據(jù)集通常比 RDB 文件所保存的數(shù)據(jù)集更完整朵诫。你甚至可以關(guān)閉持久化功能,讓數(shù)據(jù)只在服務(wù)器運(yùn)行時(shí)保存薄扁。

正文

RDB持久化

原理分析

默認(rèn) Redis 是會(huì)以快照 “RDB” 的形式將數(shù)據(jù)持久化到磁盤的剪返,一個(gè)二進(jìn) 制文件,dump.rdb邓梅。

工作原理簡(jiǎn)單介紹一下:當(dāng) Redis 需要做持久化時(shí)脱盲,Redis 會(huì) fork 一個(gè)子進(jìn)程,子進(jìn)程將數(shù)據(jù)寫到磁盤上一個(gè)臨時(shí) RDB 文件中日缨。當(dāng)子進(jìn)程完成寫臨時(shí)文件后钱反,將原來(lái)的 RDB 替換掉,這樣的好處就是可以 copy-on-write。

Redis默認(rèn)情況下面哥,是快照 RDB 的持久化方式哎壳,將內(nèi)存中的數(shù)據(jù)以快照的方式寫入二進(jìn)制文件中,默認(rèn)的文件名是 dump.rdb 幢竹。當(dāng)然我們也可以手動(dòng)執(zhí)行 save 或者 bgsave(異步)做快照耳峦。

RDB.png

Redis.conf配置 :默認(rèn)是如下配置

save 900 1 
save 300 10
save 60 10000
  • 900秒之內(nèi),如果超過(guò)1個(gè)key被修改焕毫,則發(fā)起快照保存蹲坷;
  • 300秒內(nèi),如果超過(guò)10個(gè)key被修改邑飒,則發(fā)起快照保存循签;
  • 1分鐘之內(nèi),如果1萬(wàn)個(gè)key被修改疙咸,則發(fā)起快照保存县匠;

優(yōu)缺點(diǎn)分析

RDB 的優(yōu)點(diǎn)

這種文件非常適合用于進(jìn)行備份: 比如說(shuō),你可以在最近的 24 小時(shí)內(nèi)撒轮,每小時(shí)備份一次 RDB 文件乞旦,并且在每個(gè)月的每一天,也備份一個(gè) RDB 文件题山。 這樣的話兰粉,即使遇上問(wèn)題,也可以隨時(shí)將數(shù)據(jù)集還原到不同的版本顶瞳。RDB 非常適用于災(zāi)難恢復(fù)(disaster recovery)玖姑。

RDB 的缺點(diǎn):

如果你需要盡量避免在服務(wù)器故障時(shí)丟失數(shù)據(jù),那么 RDB 不適合你慨菱。 雖然 Redis 允許你設(shè)置不同的保存點(diǎn)(save point)來(lái)控制保存 RDB 文件的頻率焰络, 但是, 因?yàn)镽DB 文件需要保存整個(gè)數(shù)據(jù)集的狀態(tài)符喝, 所以它并不是一個(gè)輕松的操作闪彼。 因此你可能會(huì)至少 5 分鐘才保存一次 RDB 文件。 在這種情況下洲劣, 一旦發(fā)生故障停機(jī)备蚓, 你就可能會(huì)丟失好幾分鐘的數(shù)據(jù)。

AOF(append only file)持久化

使用 AOF 做持久化囱稽,每一個(gè)寫命令都通過(guò)write函數(shù)追加到 appendonly.aof中郊尝,配置方式:?jiǎn)?dòng) AOF 持久化的方式

Redis.conf配置

appendfsync yes   
appendfsync always     #每次有數(shù)據(jù)修改發(fā)生時(shí)都會(huì)寫入AOF文件。
appendfsync everysec   #每秒鐘同步一次战惊,該策略為AOF的缺省策略流昏。

AOF 就可以做到全程持久化,只需要在配置文件中開(kāi)啟(默認(rèn)是no),appendonly yes開(kāi)啟 AOF 之后况凉,Redis 每執(zhí)行一個(gè)修改數(shù)據(jù)的命令谚鄙,都會(huì)把它添加到 AOF 文件中,當(dāng) Redis 重啟時(shí)刁绒,將會(huì)讀取 AOF 文件進(jìn)行“重放”以恢復(fù)到 Redis 關(guān)閉前的最后時(shí)刻闷营。

AOF優(yōu)缺點(diǎn)分析

AOF 的優(yōu)點(diǎn)

使用 AOF 持久化會(huì)讓 Redis 變得非常耐久(much more durable):你可以設(shè)置不同的 fsync 策略,比如無(wú) fsync 知市,每秒鐘一次 fsync 傻盟,或者每次執(zhí)行寫入命令時(shí) fsync 。 AOF 的默認(rèn)策略為每秒鐘 fsync 一次嫂丙,在這種配置下娘赴,Redis 仍然可以保持良好的性能,并且就算發(fā)生故障停機(jī)跟啤,也最多只會(huì)丟失一秒鐘的數(shù)據(jù)( fsync 會(huì)在后臺(tái)線程執(zhí)行诽表,所以主線程可以繼續(xù)努力地處理命令請(qǐng)求)。

AOF 的缺點(diǎn)

對(duì)于相同的數(shù)據(jù)集來(lái)說(shuō)隅肥,AOF 文件的體積通常要大于 RDB 文件的體積竿奏。根據(jù)所使用的 fsync 策略,AOF 的速度可能會(huì)慢于 RDB腥放。 在一般情況下议双, 每秒 fsync 的性能依然非常高, 而關(guān)閉 fsync 可以讓 AOF 的速度和 RDB 一樣快捉片, 即使在高負(fù)荷之下也是如此。 不過(guò)在處理巨大的寫入載入時(shí)汞舱,RDB 可以提供更有保證的最大延遲時(shí)間(latency)

如何選擇

如果你非常關(guān)心你的數(shù)據(jù),但仍然可以承受數(shù)分鐘以內(nèi)的數(shù)據(jù)丟失伍纫, 那么你可以只使用 RDB 持久。

AOF 將 Redis 執(zhí)行的每一條命令追加到磁盤中昂芜,處理巨大的寫入會(huì)降低 Redis 的性能莹规,不知道你是否可以接受。

數(shù)據(jù)庫(kù)備份和災(zāi)難恢復(fù):定時(shí)生成 RDB 快照(snapshot)非常便于進(jìn)行數(shù)據(jù)庫(kù)備份泌神, 并且 RDB 恢復(fù)數(shù)據(jù)集的速度也要比 AOF 恢復(fù)的速度要快良漱。

Redis 支持同時(shí)開(kāi)啟 RDB 和 AOF,系統(tǒng)重啟后,Redis 會(huì)優(yōu)先使用 AOF 來(lái)恢復(fù)數(shù)據(jù)欢际,這樣丟失的數(shù)據(jù)會(huì)最少母市。

參考資料

  1. Redis持久化RDB和AOF
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市损趋,隨后出現(xiàn)的幾起案子患久,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒋失,死亡現(xiàn)場(chǎng)離奇詭異返帕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)篙挽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門荆萤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人铣卡,你說(shuō)我怎么就攤上這事链韭。” “怎么了算行?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵梧油,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我州邢,道長(zhǎng)儡陨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任量淌,我火速辦了婚禮骗村,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呀枢。我一直安慰自己胚股,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布裙秋。 她就那樣靜靜地躺著琅拌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摘刑。 梳的紋絲不亂的頭發(fā)上进宝,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音枷恕,去河邊找鬼党晋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛徐块,可吹牛的內(nèi)容都是我干的未玻。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼胡控,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扳剿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起铜犬,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舞终,失蹤者是張志新(化名)和其女友劉穎轻庆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體敛劝,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡余爆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夸盟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾方。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖上陕,靈堂內(nèi)的尸體忽然破棺而出桩砰,到底是詐尸還是另有隱情,我是刑警寧澤释簿,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布亚隅,位于F島的核電站,受9級(jí)特大地震影響庶溶,放射性物質(zhì)發(fā)生泄漏煮纵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一偏螺、第九天 我趴在偏房一處隱蔽的房頂上張望行疏。 院中可真熱鬧,春花似錦套像、人聲如沸酿联。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贞让。三九已至,卻和暖如春柳譬,著一層夾襖步出監(jiān)牢的瞬間震桶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工征绎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磨取。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓人柿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親忙厌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凫岖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • 從這篇文章開(kāi)始,將依次介紹Redis高可用相關(guān)的知識(shí)——持久化逢净、復(fù)制(及讀寫分離)哥放、哨兵歼指、以及集群。 本文將先說(shuō)明...
    不變甄心閱讀 692評(píng)論 0 4
  • 前言 在上一篇文章中甥雕,介紹了Redis內(nèi)存模型踩身,從這篇文章開(kāi)始,將依次介紹Redis高可用相關(guān)的知識(shí)——持久化社露、復(fù)...
    Java架構(gòu)閱讀 2,304評(píng)論 3 21
  • 一挟阻、Redis高可用概述 在介紹Redis高可用之前,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義峭弟。 我們知道附鸽,在w...
    Java架構(gòu)_師閱讀 390評(píng)論 0 2
  • 一、Redis高可用概述 在介紹Redis高可用之前瞒瘸,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義坷备。 我們知道,在w...
    空語(yǔ)閱讀 1,594評(píng)論 0 2
  • “人際交往”情臭,通常是指人與人交往關(guān)系的總稱省撑,包括親屬關(guān)系、朋友關(guān)系等谎柄。在社會(huì)學(xué)中丁侄,人際關(guān)系被定義為人們?cè)谏a(chǎn)或生活...
    世間安得雙全法閱讀 767評(píng)論 0 1