Redis學(xué)習(xí)筆記---持久化

持久化

將數(shù)據(jù)從內(nèi)存中以某種形式同步到硬盤中,使得重啟后可以根據(jù)硬盤中的記錄恢復(fù)數(shù)據(jù),這一過程就是持久化辐棒。

Redis支持兩種方式的持久化:

  • RDB方式:根據(jù)指定規(guī)則“定時”將內(nèi)存中的數(shù)據(jù)存儲在硬盤上寡夹;
  • AOF方式:每次執(zhí)行命令后將命令本身記錄下來。

一桨菜、RDB方式

? RDB方式的持久化是通過快照(snapshotting)完成的豁状,當(dāng)完成一定條件時Redis會自動將內(nèi)存中的所有數(shù)據(jù)生成一份副本并存儲在硬盤上,這個過程稱為“快照”倒得。

1.根據(jù)配置規(guī)則進(jìn)行自動快照

通過redis.conf配置文件(/usr/local/etc/redis.conf)泻红,我們可以看到Redis為我們預(yù)置了3個條件:

save 900 1      # 在15分鐘(900秒)內(nèi)有一個或一個以上的鍵被更改則進(jìn)行快照。
save 300 10     # 在5分鐘(300秒)內(nèi)至少有10個鍵被更改則進(jìn)行快照霞掺。
save 60 10000   # 在1分鐘(60秒)內(nèi)至少有1000個鍵被更改則進(jìn)行快照谊路。

每條快照條件占一行,以SAVE參數(shù)開頭菩彬。我們可以自定義這些參數(shù)缠劝,如果符合自動快照條件潮梯,Redis會自動執(zhí)行快照條件。

2.用戶執(zhí)行SAVE或BGSAVE命令

除了自動快照惨恭,當(dāng)服務(wù)重啟秉馏、手動遷移以及備份時,我們需要進(jìn)行手動快照操作脱羡。

1.SAVE命令

當(dāng)執(zhí)行SAVE命令時萝究,Redis同步地進(jìn)行快照操作,在執(zhí)行快照操作中會阻塞所有來自客戶端的請求锉罐。如果數(shù)據(jù)庫中的數(shù)據(jù)比較多時帆竹,會導(dǎo)致Redis較長時間內(nèi)無響應(yīng)。因避免在生產(chǎn)環(huán)境中使用這一命令脓规。

2.BGSAVE命令(手動時推薦)

BGSAVE命令可以在后臺異步執(zhí)行快照操作栽连,快照的同時仍可接受來自客戶端的請求。執(zhí)行BGSAVE命令后Redis立即返回OK表示開始執(zhí)行快照操作侨舆,可通過LASTSAVE命令獲取最近一次成功執(zhí)行快照的時間秒紧。

3.執(zhí)行FLUSHALL命令

執(zhí)行FLUSHALL命令時,Redis會清除數(shù)據(jù)庫中的所有數(shù)據(jù)态罪。但不論清楚數(shù)據(jù)庫的過程是否觸發(fā)了自動快照條件噩茄,只要自動快照條件不為空,Redis就會執(zhí)行一次快照操作复颈。

當(dāng)沒有定義自動快照條件時绩聘,執(zhí)行FLUSHALL則不會進(jìn)行快照。

4.執(zhí)行復(fù)制時

當(dāng)設(shè)置主從模式時耗啦,Redis會在復(fù)制初始化時進(jìn)行自動快照凿菩。即使沒有定義自動快照條件和手動執(zhí)行快照操作,也會生成RDB快照文件帜讲。

5.快照原理

快照的過程:

? 1)Redis使用fork函數(shù)復(fù)制一份當(dāng)前進(jìn)程(父進(jìn)程)的副本(子進(jìn)程)衅谷;

? 2)父進(jìn)程繼續(xù)接收并處理客戶端發(fā)來的命令,而子進(jìn)程開始將內(nèi)存中的數(shù)據(jù)寫入到硬盤中的臨時文件似将;

? 3)當(dāng)子進(jìn)程寫入完所有數(shù)據(jù)后會用該臨時文件替換舊的RDB文件获黔,至此一次快照操作完成。

RDB文件的路徑和文件名在验,可以通過配置文件redis.conf中的dirdbfilename參數(shù)來設(shè)置玷氏。

RDB文件是經(jīng)過壓縮(可通過配置rdbcompression參數(shù)禁用壓縮,默認(rèn)是開啟的)的二進(jìn)制格式腋舌,所以占用的空間會小于內(nèi)存中的數(shù)據(jù)大小盏触,更加利于傳輸。

Redis啟動后會讀取RDB快照文件,將數(shù)據(jù)從硬盤載入到內(nèi)存中赞辩。通過RDB方式實(shí)現(xiàn)的持久化雌芽,若Redis出現(xiàn)異常,就會丟失最后一次快照以后更改的所有數(shù)據(jù)辨嗽。

二世落、AOF方式

AOF = Append Only FileAOF持久化可以降低進(jìn)程中止導(dǎo)致的數(shù)據(jù)丟失糟需;他可以將Redis執(zhí)行的每一條寫命令追加到硬盤文件中岛心。

1.開啟AOF

默認(rèn)情況下,Redis是沒有開啟AOF的篮灼,可以通過配置文件進(jìn)行開啟:

appendonly yes

AOF文件的保存位置和RDB文件的位置相同,都是同過dir參數(shù)設(shè)置的徘禁,默認(rèn)的文件名是appendonly.aof,可以通過appendfilename參數(shù)修改:

appendfilename appendonly.aof

2.AOF實(shí)現(xiàn)

當(dāng)AOF文件的大小達(dá)到一定條件時诅诱,Redis就會自動重寫AOF文件,這個條件可以在配置文件中設(shè)置:

auto-aof-rewrite-percentage 100     # 當(dāng)目前的AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時送朱,會再次進(jìn)行重寫娘荡,如果之前沒有重寫,則以啟動時的AOF文件大小為依據(jù)驶沼。
auto-aof-rewrite-min-size 64mb      # 限制了允許重寫的最小AOF文件大小

除了自動執(zhí)行重寫外炮沐,還可以手動執(zhí)行AOF重寫:

127.0.0.1:6379> bgrewriteaof

AOF文件和RDB文件的文件格式完全不同。

在啟動Redis時會逐個執(zhí)行AOF文件中的命令來將硬盤中的數(shù)據(jù)載入到內(nèi)存中回怜,載入速度相較于RDB會慢一些大年。

3.同步硬盤數(shù)據(jù)

在執(zhí)行AOF操作時,由于操作系統(tǒng)的緩存機(jī)制玉雾,數(shù)據(jù)并未真正地寫入硬盤翔试,而是進(jìn)入了系統(tǒng)的硬盤緩存中。默認(rèn)情況下系統(tǒng)每30秒會執(zhí)行一次同步操作复旬,以便將硬盤緩存中的數(shù)據(jù)真正寫入到硬盤中垦缅,如果在這期間出現(xiàn)異常會導(dǎo)致硬盤緩存中的數(shù)據(jù)丟失。這就需要通過設(shè)置參數(shù)要求系統(tǒng)主動將緩存內(nèi)容同步要硬盤中驹碍。

# appendfsync always    # 每次執(zhí)行寫入都會執(zhí)行同步壁涎,最安全但也最慢
appendfsync everysec    # 默認(rèn)采用everysec規(guī)則,每秒執(zhí)行一次同步操作志秃。
# appendfsync no        # 不主動進(jìn)行同步操作怔球,而是交給操作系統(tǒng)來做(即每30秒一次),雖快但不安全

一般情況下使用默認(rèn)值everysec就夠了洽损,性能和安全都有保障庞溜。

Redis允許同時開啟AOFRDB


個人博客:https://jenkinwang.github.io/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市流码,隨后出現(xiàn)的幾起案子又官,更是在濱河造成了極大的恐慌,老刑警劉巖漫试,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件六敬,死亡現(xiàn)場離奇詭異,居然都是意外死亡驾荣,警方通過查閱死者的電腦和手機(jī)外构,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來播掷,“玉大人审编,你說我怎么就攤上這事∑缧伲” “怎么了垒酬?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長件炉。 經(jīng)常有香客問我憔鬼,道長邓萨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮萍诱,結(jié)果婚禮上含蓉,老公的妹妹穿的比我還像新娘命锄。我一直安慰自己囱桨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布秀撇。 她就那樣靜靜地躺著伏伯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捌袜。 梳的紋絲不亂的頭發(fā)上说搅,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音虏等,去河邊找鬼弄唧。 笑死,一個胖子當(dāng)著我的面吹牛霍衫,可吹牛的內(nèi)容都是我干的候引。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼敦跌,長吁一口氣:“原來是場噩夢啊……” “哼澄干!你這毒婦竟也來了逛揩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤麸俘,失蹤者是張志新(化名)和其女友劉穎辩稽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體从媚,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逞泄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拜效。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喷众。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖紧憾,靈堂內(nèi)的尸體忽然破棺而出到千,到底是詐尸還是另有隱情,我是刑警寧澤赴穗,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布父阻,位于F島的核電站,受9級特大地震影響望抽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜履婉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一煤篙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毁腿,春花似錦辑奈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胯究,卻和暖如春稍计,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裕循。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工臣嚣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剥哑。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓硅则,卻偏偏與公主長得像,于是被迫代替她去往敵國和親株婴。 傳聞我的和親對象是個殘疾皇子怎虫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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

  • 一、Redis高可用概述 在介紹Redis高可用之前,先說明一下在Redis的語境中高可用的含義大审。 我們知道蘸际,在w...
    空語閱讀 1,597評論 0 2
  • 企業(yè)級redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用,持久化是不可減少的饥努,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,205評論 0 7
  • 本文是《Redis開發(fā)與運(yùn)維》的學(xué)習(xí)筆記捡鱼。內(nèi)容大部分摘自此書。 眾所周知酷愧,redis是內(nèi)存數(shù)據(jù)庫驾诈,它把數(shù)據(jù)存儲在內(nèi)...
    小北覓閱讀 570評論 0 3
  • 一:快照模式 或莫過于SNAPSHOTTING模式,這個不需要反駁吧溶浴,而且你可能還知道乍迄,使用SNAPSHOTTIN...
    kevin0016閱讀 627評論 0 1
  • 現(xiàn)在想起去外婆家的路,心里還會涌起一股股的溫暖士败,很多很多的小時候的畫面也會浮現(xiàn)出來闯两。 外婆家離我們家?guī)讉€村的距離,...
    愛寫文字的啊頭閱讀 730評論 0 1