該文章為知識總結的文章,如果是初學者,建議先從專欄學習:redis專欄
主要解決以下問題:比如你部署了乙個redis,作為cache快取,當然也可以儲存一些較為重要的資料
如果沒有持久化的話,redis遇到災難性故障的時候,就會丟失所有的資料
如果通過持久化將資料搞乙份兒在磁碟上去,然後定期比如說同步和備份到一些雲儲存服務上去,那麼就可以保證資料不丟失全部,還是可以恢復一部分資料回來的
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,效能也還是很高的
(1)不要僅僅使用rdb,因為那樣會導致你丟失很多資料
(2)也不要僅僅使用aof,因為那樣有兩個問題,第一,你通過aof做冷備,沒有rdb做冷備,來的恢復速度更快; 第二,rdb每次簡單粗暴生成資料快照,更加健壯,可以避免aof這種複雜的備份和恢復機制的bug
(3)綜合使用aof和rdb兩種持久化機制,用aof來保證資料不丟失,作為資料恢復的第一選擇; 用rdb來做不同程度的冷備,在aof檔案都丟失或損壞不可用的時候,還可以使用rdb來進行快速的資料恢復
Redis 持久化總結
一 redis提供了哪些持久化機制 1 rdb持久化 該機制是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟。2 aof持久化 該機制將以日誌的形式記錄伺服器所處理的每乙個寫操作,在redis伺服器啟動之初會讀取該檔案來重新構建資料庫,以保證啟動後資料庫中的資料是完整的。3 無持久化 我們可以通...
redis持久化 AOF持久化
1.aof持久化原理 aof持久化會將被執行的寫命令寫到aof檔案的末尾。在恢復的時候,redis只要從頭到尾重新執行一次aof檔案包含的所有寫命令 2.配置選項 固態硬碟禁用always選項,在某些情況頻繁讀寫會大大降低固態硬碟的壽命 4.aof檔案的重寫和壓縮 aof檔案裡面記錄了所有的命令而不...
redis持久化之AOF持久化
aof與rdb持久化通過儲存資料庫中的鍵值對來記錄資料庫狀態不同,aof持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態的。被寫入aof檔案的所有命令都是以redis的命令請求協議格式儲存的。當aof持久化功能處於開啟狀態,伺服器在執行完乙個寫命令之後,會以協議格式將被執行的寫命令追加...