您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關redis中怎么實現持久化,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
RDB:RDB 持久化機制,是對 redis 中的數據執行周期性的持久化。
AOF:AOF 機制對每條寫入命令作為日志,以 append-only
的模式寫入一個日志文件中,在 redis 重啟的時候,可以通過回放 AOF 日志中的寫入指令來重新構建整個數據集。
通過 RDB 或 AOF,都可以將 redis 內存中的數據給持久化到磁盤上面來,然后可以將這些數據備份到別的地方去,比如說阿里云等云服務。
如果 redis 掛了,服務器上的內存和磁盤上的數據都丟了,可以從云服務上拷貝回來之前的數據,放到指定的目錄中,然后重新啟動 redis,redis 就會自動根據持久化數據文件中的數據,去恢復內存中的數據,繼續對外提供服務。
如果同時使用 RDB 和 AOF 兩種持久化機制,那么在 redis 重啟的時候,會使用 AOF 來重新構建數據,因為 AOF 中的數據更加完整。
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 會每隔 1 秒,通過一個后臺線程執行一次fsync
操作,最多丟失 1 秒鐘的數據。
AOF 日志文件以 append-only
模式寫入,所以沒有任何磁盤尋址的開銷,寫入性能非常高,而且文件不容易破損,即使文件尾部破損,也很容易修復。
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,因為那樣有兩個問題,第一,你通過 AOF 做冷備,沒有 RDB 做冷備,來的恢復速度更快; 第二,RDB 每次簡單粗暴生成數據快照,更加健壯,可以避免 AOF 這種復雜的備份和恢復機制的 bug。
redis 支持同時開啟開啟兩種持久化方式,我們可以綜合使用 AOF 和 RDB 兩種持久化機制,用 AOF 來保證數據不丟失,作為數據恢復的第一選擇; 用 RDB 來做不同程度的冷備,在 AOF 文件都丟失或損壞不可用的時候,還可以使用 RDB 來進行快速的數據恢復。
上述就是小編為大家分享的redis中怎么實現持久化了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。