redis持久化方案 RDB和AOF

2021-09-02 10:28:04 字數 2314 閱讀 2797

redis持久化主要是做災難恢復,資料恢復

redis持久化:rdb,aof

1.rdb持久化機制,對redis中的資料執行週期性的持久化(每隔指定的時間以快照的形式儲存到檔案當中,儲存的是資料檔案)

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

通過rdb或aof,都可以將redis記憶體中的資料給持久化到磁碟上面來,然後可以將這些資料備份到別的地方去,比如說阿里雲,雲服務

如果redis掛了,伺服器上的記憶體和磁碟上的資料都丟了,可以從雲服務上拷貝回來之前的資料,放到指定的目錄中,然後重新啟動redis,redis就會自動根據持久化資料檔案中的資料,去恢復記憶體中的資料,繼續對外提供服務

如果同時使用rdb和aof兩種持久化機制,那麼在redis重啟的時候,會使用aof來重新構建資料,因為aof中的資料更加完整

(1)rdb會生成多個資料檔案,每個資料檔案都代表了某乙個時刻中redis的資料,這種多個資料檔案的方式,非常適合做冷備,可以將這種完整的資料檔案傳送到一些遠端的安全儲存上去,比如說amazon的s3雲服務上去,在國內可以是阿里雲的odps分布式儲存上,以預定好的備份策略來定期備份redis中的資料

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

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

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

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

(1)aof可以更好的保護資料不丟失,一般aof會每隔1秒,通過乙個後台執行緒執行一次fsync操作,最多丟失1秒鐘的資料

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

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

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

(2)aof開啟後,支援的寫qps會比rdb支援的寫qps低,因為aof一般會配置成每秒fsync一次日誌檔案,當然,每秒一次fsync,效能也還是很高的

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

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

(2)也不要僅僅使用aof,因為那樣有兩個問題,第一,你通過aof做冷備,沒有rdb做冷備,來的恢復速度更快; 第二,rdb每次簡單粗暴生成資料快照,更加健壯,可以避免aof這種複雜的備份和恢復機制的bug

(3)綜合使用aof和rdb兩種持久化機制,用aof來保證資料不丟失,作為資料恢復的第一選擇; 用rdb來做不同程度的冷備,在aof檔案都丟失或損壞不可用的時候,還可以使用rdb來進行快速的資料恢復

redis持久化方案之RDB

注意 redis啟動後會讀取rdb快照檔案,將資料從硬碟載入到記憶體。根據資料量大小與結構和伺服器效能不同,這個時間也不同。通常將記錄一千萬個字串型別鍵 大小為1gb的快照檔案載入到記憶體中需要花費20 30秒鐘。redis使用fork函式複製乙份當前程序的副本 子程序 父程序繼續接收並處理客戶端發...

redis持久化(rdb和aof)

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

Redis 持久化方式 RDB

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