Redis的AOF和RDB原理及優缺點

2021-09-11 06:30:41 字數 1934 閱讀 1371

redis持久化的意義主要在於故障恢復,比如部署了乙個redis伺服器,作為快取裡面可能有些重要資料,如果沒有持久化,redis遇到災難性故障時就會丟失所有的資料。所以持久化是必不可少的。

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

通過rdb和aof都可以講redis記憶體中的資料持久化到硬碟上,然後可以將資料備份到雲伺服器上。

如果redis掛了可以從雲伺服器上的備份檔案copy到指定位置後重啟redis,redis就會自動持久化檔案中的資料,去恢復記憶體中的資料。

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

當滿足條件時,redis需要執行rdb的時候伺服器會執行以下操作:

1.redis呼叫系統的fork()函式建立乙個子程序

2.子程序將資料集寫入乙個臨時的rdb檔案

3.當子程序完成對臨時的rdb檔案的寫入時,redis用新的rdb檔案來替換原來舊的rdb檔案,並刪除舊的rdb檔案。

redis在進行快照的過程中不會對rdb檔案進行修改,只有快照結束後才會將舊快照替換成新快照,也就是說任何時候rdb檔案都是完整的。

rdb優點

(1)rdb會生成多個資料檔案,每個資料檔案都代表了某乙個時刻的資料,這種多個資料檔案的方式,非常適合做冷備。

(2)rdb在redis對外提供讀寫服務的時候,影響非常的小,因為redis主程序只需要fork乙個子程序出來,讓子程序對磁碟io來進行持久化。

(3)rdb在恢復大資料集的時速度比aof的恢復速度快。

rdb確定:

(1)如果redis要故障時盡可能的少丟失資料,rdb沒有aof好。例如1:00進行的快照,在1:10又要進行快照的時候宕機了,這個時候就會丟失10分鐘的資料。

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

redis中的資料是有一定數量的,不可能說redis中的資料無限增長,進而導致aof檔案無限增長。記憶體的大小是一定的,等到了一定大小redis會採用淘汰策略,自動將記憶體中的資料清除掉。aof是存放每條寫命令的,所以會不斷的增大,當大到一定程度時,aof會做rewrite操作,rewrite操作就是基於當時redis的資料重新構造乙個小的aof檔案,然後將大的aof檔案刪除。

aof優點:

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

(3)aof日誌檔案的命令通過非常可讀的方式進行記錄,這個非常適合做災難性的誤刪除緊急恢復,如果某人不小心用flushall命令清空了所有資料,只要這個時候還沒有執行rewrite,那麼就可以將日誌檔案中的flushall刪除,進行恢復。

aof缺點:

(1)對於同乙份資料備份檔案,aof比rdb大

(2)aof開啟後支援寫的qps會比rdb支援的寫的qps低,因為aof一般會配置成每秒fsync操作,每秒的fsync操作還是很高的。

(3)資料恢復比較慢,不適合做冷備。

(1)不要僅僅使用rdb,會丟失很多資料

(2)不要僅僅使用aof,因為這一會有兩個問題,第一通過aof做冷備沒有rdb做冷備恢復的速度快;第二rdb每次簡單粗暴生成資料快照,更加健壯。

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

redis持久化(rdb和aof)

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

Redis的持久化RDB和AOF

rdb 什麼是rdb 在指定時間間隔內,將記憶體中的資料集快照寫入磁碟,也就是snapshot快照,它恢復時是將快照檔案直接讀到記憶體中,來達到恢復資料的。如何持久化 redis會單獨建立 fork 乙個子程序來進行持久化,會先將資料寫進乙個臨時檔案中,等到持久化過程結束了,再用這個臨時檔案替換上次...

redis持久化方案 RDB和AOF

redis持久化主要是做災難恢復,資料恢復 redis持久化 rdb,aof 1.rdb持久化機制,對redis中的資料執行週期性的持久化 每隔指定的時間以快照的形式儲存到檔案當中,儲存的是資料檔案 如果我們想要redis僅僅作為純記憶體的快取來用,那麼可以禁止rdb和aof所有的持久化機制 通過r...