2 3redis持久化rdb和aof的對比

2021-08-29 22:44:50 字數 2897 閱讀 5580

總結

1.rdb

優點rdb對redis對外提供的讀寫服務,影響非常小,可以讓redis保持高效能

rdb特別適合做冷備份 缺點

容易丟失資料,因為按時時間間隔儲存資料

rdb的間隔太長,生成的rdb檔案太大了,redis本身的效能一定有影響的

2.aof

優點aof可以更好的保護資料不丟失

非常適合做災難性的誤刪除的緊急恢復

aof日誌檔案即使過大的時候,出現後台重寫操作,也不會影響客戶端的讀寫 缺點

aof日誌檔案通常比rdb資料快照檔案更大

aof開啟後,支援的寫qps會比rdb支援的寫qps低

做資料恢復的時候,會比較慢,

做冷備,定期的備份,不太方便

rdb持久化機制,對redis中的資料執行週期性的持久化

注意點:如果我們想要redis僅僅作為純記憶體的快取來用,那麼可以禁止rdb和aof所有的持久化機制

rdb會生成多個資料檔案,每個資料檔案都代表了某乙個時刻中redis的資料,這種多個資料檔案的方式,非常適合做冷備,可以將這種完整的資料檔案傳送到一些遠端的安全儲存上去,以預定好的備份策略來定期備份redis中的資料

rdb也可以做冷備,生成多個檔案,每個檔案都代表了某乙個時刻的完整的資料快照

aof也可以做冷備,只有乙個檔案,但是你可以,每隔一定時間,去copy乙份這個檔案出來

rdb做冷備,優勢在哪兒呢?由redis去控制固定時長生成快照檔案的事情,比較方便; aof,還需要自己寫一些指令碼去做這個事情,各種定時

rdb資料做冷備,在最壞的情況下,提供資料恢復的時候,速度比aof快

rdb對redis對外提供的讀寫服務,影響非常小,可以讓redis保持高效能,因為redis主程序只需要fork乙個子程序,讓子程序執行磁碟io操作來進行rdb持久化即可

rdb,每次寫,都是直接寫redis記憶體,只是在一定的時候,才會將資料寫入磁碟中 aof,每次都是要寫檔案的,雖然可以快速寫入os

cache中,但是還是有一定的時間開銷的,速度肯定比rdb略慢一些

相對於aof持久化機制來說,直接基於rdb資料檔案來重啟和恢復redis程序,更加快速

aof,存放的指令日誌,做資料恢復的時候,其實是要回放和執行所有的指令日誌,來恢復出來記憶體中的所有資料的

rdb,就是乙份資料檔案,恢復的時候,直接載入到記憶體中即可

結合上述優點,rdb特別適合做冷備份,冷備

如果想要在redis故障時,盡可能少的丟失資料,那麼rdb沒有aof好。一般來說,rdb資料快照檔案,都是每隔5分鐘,或者更長時間生成一次,這個時候就得接受一旦redis程序宕機,那麼會丟失最近5分鐘的資料

這個問題,也是rdb最大的缺點,就是不適合做第一優先的恢復方案,如果你依賴rdb做第一優先恢復方案,會導致資料丟失的比較多

rdb每次在fork子程序來執行rdb快照資料檔案生成的時候,如果資料檔案特別大,可能會導致對客戶端提供的服務暫停數毫秒,或者甚至數秒

一般不要讓rdb的間隔太長,否則每次生成的rdb檔案太大了,對redis本身的效能可能會有影響的

aof可以更好的保護資料不丟失,一般aof會每隔1秒,通過乙個後台執行緒執行一次fsync操作,最多丟失1秒鐘的資料每隔1秒,就執行一次fsync操作,保證os cache中的資料寫入磁碟中redis程序掛了,最多丟掉1秒鐘的資料

aof日誌檔案即使過大的時候,出現後台重寫操作,也不會影響客戶端的讀寫。因為在rewritelog的時候,會對其中的指導進行壓縮,建立出乙份需要恢復資料的最小日誌出來。再建立新日誌檔案的時候,老的日誌檔案還是照常寫入。當新的merge後的日誌檔案ready的時候,再交換新老日誌檔案即可。

aof日誌檔案的命令通過非常可讀的方式進行記錄,非常適合做災難性的誤刪除的緊急恢復。比如某人不小心用flushall命令清空了所有資料,只要這個時候後台rewrite還沒有發生,那麼就可以立即拷貝aof檔案,將最後一條flushall命令給刪了,然後再將該aof檔案放回去,就可以通過恢復機制,自動恢復所有資料

對於同乙份資料來說,aof日誌檔案通常比rdb資料快照檔案更大

aof開啟後,支援的寫qps會比rdb支援的寫qps低,因為aof一般會配置成每秒fsync一次日誌檔案,當然,每秒一次fsync,效能也還是很高的如果你要保證一條資料都不丟,也是可以的,aof的fsync設定成每次寫入一條資料,fsync一次,那就完蛋了,redis的qps大降

以前aof發生過bug,就是通過aof記錄的日誌,進行資料恢復的時候,沒有恢復一模一樣的資料出來。所以說,類似aof這種較為複雜的基於命令日誌/merge/回放的方式,比基於rdb每次持久化乙份完整的資料快照檔案的方式,更加脆弱一些,容易有bug。不過aof就是為了避免rewrite過程導致的bug,因此每次rewrite並不是基於舊的指令日誌進行merge的,而是基於當時記憶體中的資料進行指令的重新構建,這樣健壯性會好很多。

唯一的比較大的缺點,其實就是做資料恢復的時候,會比較慢,還有做冷備,定期的備份,不太方便,可能要自己手寫複雜的指令碼去做,做冷備不太合適

不要僅僅使用rdb,因為那樣會導致你丟失很多資料

也不要僅僅使用aof,因為那樣有兩個問題。

第一,你通過aof做冷備,沒有rdb做冷備,恢復資料速度更慢;

第二,rdb每次簡單粗暴生成資料快照,更加健壯,可以避免aof這種複雜的備份和恢復機制的bug

綜合使用aof和rdb兩種持久化機制,用aof來保證資料不丟失,作為資料恢復的第一選擇;

用rdb來做不同程度的冷備,在aof檔案都丟失或損壞不可用的時候,還可以使用rdb來進行快速的資料恢復

redis持久化(rdb和aof)

rdb redis database 在制定的時間間隔內將記憶體中的資料集快照寫入磁碟 snapshot快照 redis恢復時將快照檔案直接讀到記憶體。rdb儲存的是dump.rdb檔案 在bin 目錄下會看到 redis會單獨建立 fork 乙個子程序來進行持久化,會先將資料寫入到乙個臨時檔案中,...

Redis 持久化方式 RDB

redis持久化資料的兩種方式之一,另外一種是aof。redis會定期儲存資料快照至乙個rbd檔案中,並在啟動時自動載入rdb檔案,恢復之前儲存的資料。自動觸發 可以在redis的配置檔案中進行設定,以達到滿足條件自動觸發rdb備份。其他可能 主從複製的時候 因為要複製給從節點最新資訊,所以也會觸發...

redis持久化之RDB

redis是乙個非常好的快取中介軟體,就是將我們的資料放到快取中。我們知道快取的讀取是非常快的。但是誰都避免不了伺服器的意外宕機。一旦宕機,快取中的資料就會丟失。redis除了有主備方式來解決宕機之後的資料丟失之外,還有持久化機制。把資料寫在硬碟上,機器宕機之後啟動時會先去硬碟上讀取資料寫進記憶體。...