Redis持久防方案對比

Redis提供了RDB、AOF持久化方式,將內存中的數據保存到磁盤中,避免數據意外丟失

持久化—RDB與AOF比較

 RDB

RDB(快照)通過將服務器某個時間點上的數據庫狀態(非空數據庫以及相關鍵值對)保存到一個經過壓縮的二進制文件中(dump.rdb),也是默認的持久化方式。
手動持久化命令:
SAVE 命令會阻塞Redis服務器進程。
BGSAVE 會派生出一個子進程,然後由子進程負責創建RDB文件,服務器父進程繼續處理命令請求。


優點:RDB 是一個非常緊湊的文件,它保存了 Redis 在某個時間點上的數據集。這種文件非常適合用於進行備份。


缺點:如果你需要儘量避免在服務器故障時丟失數據,那麼 RDB 不適合你。 雖然 Redis 允許你設置不同的保存點(save point)來控制保存 RDB 文件的頻率, 但是, 因爲RDB 文件需要保存整個數據集的狀態,所以它並不是一個輕鬆的操作。因此你可能會至少 5 分鐘才保存一次 RDB 文件。 在這種情況下, 一旦發生故障停機, 你就可能會丟失好幾分鐘的數據。

 AOF

AOF持久化將“操作 + 數據”以格式化指令的方式追加到操作日誌文件(appendonly.aof)的尾部,在append操作返回後(已經寫入到文件或者即將寫入),才進行實際的數據變更,“日誌文件”保存了歷史所有的操作過程;當server需要數據恢復時,可以直replay此日誌文件,即可還原所有的操作過程。

AOF默認關閉,開啓方法,修改配置文件reds.conf:appendonly yes
AOF文件同步策略,有三個合法值:always everysec no,默認爲everysec


優點:使用 AOF 持久化會讓 Redis 變得非常耐久:你可以設置不同的 fsync 策略,比如無 fsync ,每秒鐘一次 fsync ,或者每次執行寫入命令時 fsync 。 AOF 的默認策略爲每秒鐘 fsync 一次,在這種配置下,Redis 仍然可以保持良好的性能,並且就算髮生故障停機,也最多隻會丟失一秒鐘的數據( fsync 會在後臺線程執行,所以主線程可以繼續努力地處理命令請求)。


缺點:對於相同的數據集來說,AOF 文件的體積通常要大於 RDB 文件的體積。根據所使用的 fsync 策略,AOF 的速度可能會慢於 RDB 。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章