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...