Redis 持久化有幾種方式?

2021-10-14 21:41:48 字數 1848 閱讀 3817

redis 持久化的兩種方式

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

rdb 優缺點

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

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

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

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

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

aof 優缺點

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

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

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

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

aof 開啟後,支援的寫 qps 會比 rdb 支援的寫 qps 低,因為 aof 一般會配置成每秒 fsync 一次日誌檔案,當然,每秒一次 fsync,效能也還是很高的。(如果實時寫入,那麼 qps 會大降,redis 效能會大大降低)

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

rdb 和 aof 到底該如何選擇

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

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

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

Redis 的持久化有哪幾種方式?

redis 的持久化有哪幾種方式?不同的持久化機制都有什麼優缺點?持久化機制具體底層是如何實現的?redis 如果僅僅只是將資料快取在記憶體裡面,如果 redis 宕機了再重啟,記憶體裡的資料就全部都弄丟了啊。你必須得用 redis 的持久化機制,將資料寫入記憶體的同時,非同步的慢慢的將資料寫入磁碟...

Redis持久化的幾種方式

1.rdb rdb持久化 原理是將reids在記憶體中的資料庫記錄定時dump到磁碟上的rdb持久化 rdb持久化是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork乙個子程序,先將資料集寫入臨時檔案,寫入成功後,再替換之前的檔案,用二進位制壓縮儲存。2.aof aof持久化...

Redis持久化方式

一 前言 持久化主要是做災難恢復 資料恢復,也可以歸類到高可用的乙個環節中去,比如你 redis 整個掛了,然後 redis 就不可用了,你要做的事情就是讓 redis 變得可用,盡快變得可用。重啟 redis,盡快讓它堆外提供服務,如果沒做資料備份,這時候 redis 啟動了,也不可用啊,資料都沒...