天天看點

2021-05-13 Redis面試題 AOF的優缺點?

AOF的優缺點?

● 優點:

使用AOF持久化會讓Redis變得非常耐久(much more durable):你可以設定不同的fsync政策,比如無fsync,每秒鐘一次fsync,或者每次執行寫入指令時fsync。AOF的預設政策為每秒鐘fsync一次,在這種配置下,Redis仍然可以保持良好的性能,并且就算發生故障停機,也最多隻會丢失一秒鐘的資料(fsync會在背景線程執行,是以主線程可以繼續努力地處理指令請求)。AOF檔案是一個隻進行追加操作的日志檔案(append onlylog),是以對AOF檔案的寫入不需要進行seek,即使日志因為某些原因而包含了未寫入完整的指令(比如寫入時磁盤已滿,寫入中途停機,等等),redis-check-aof工具也可以 輕易地修複這種問題。

Redis可以在AOF檔案體積變得過大時,自動地在背景對AOF進行重寫:重寫後的新AOF檔案包含了恢複目前資料集所需的最小指令集合。整個重寫操作是絕對安全的,因為Redis在建立新AOF檔案的過程中,會繼續将指令追加到現有的AOF檔案裡面,即使重寫過程中發生停機,現有的AOF檔案也不會丢失。而一旦新AOF檔案建立完畢,Redis就會從舊AOF檔案切換到新AOF檔案,并開始對新AOF檔案進行追加操作。

● 缺點:

對于相同的資料集來說,AOF檔案的體積通常要大于RDB檔案的體積。根據所使用的fsync政策,AOF的速度可能會慢于RDB。在一般情況下,每秒fsync的性能依然非常高,而關閉fsync可以讓AOF的速度和RDB一樣快,即使在高負荷之下也是如此。不過在處理巨大的寫入載入時,RDB可以提供更有保證的最大延遲時間(latency)。

AOF在過去曾經發生過這樣的bug:因為個别指令的原因,導緻AOF檔案在重新載入時,無法将資料集恢複成儲存時的原樣。(舉個例子,阻塞指令BRPOPLPUSH就曾經引起過這樣的bug。)測試套件裡為這種情況添加了測試:它們會自動生成随機的、複雜的資料集,并通過重新載入這些資料來確定一切正常。雖然這種bug在AOF檔案中并不常見,但是對比來說,RDB幾乎是不可能出現這種bug的。

繼續閱讀