RDB和AOF對比
關於RDB和AOF的優缺點,官網上面也給了比較詳細的說明redis.io/topics/pers…
RDB
優點:
- RDB快照是一個壓縮過的非常緊湊的檔案,儲存著某個時間點的資料集,適合做資料的備份,災難恢復;
- 可以最大化Redis的的效能,在儲存RDB檔案,伺服器程式只需要fork一個子程式來完成RDB檔案的建立,父程式不需要做IO操作;
- 與AOF相比,恢復大資料集的時候會更快;
缺點:
- RDB的資料安全性是不如AOF的,儲存整個資料集的過程是比繁重的,根據配置可能要幾分鐘才快照一次,如果伺服器當機,那麼就可能丟失幾分鐘的資料;
- Redis資料集較大時,fork的子程式要完成快照會比較耗CPU、耗時;
AOF
優點:
- 資料更完整,安全性更高,秒級資料丟失(取決fsync策略,如果是everysec,最多丟失1秒的資料);
- AOF檔案是一個只進行追加的日誌檔案,且寫入操作是以Redis協議的格式儲存的,內容是可讀的,適合誤刪緊急恢復;
缺點:
- 對於相同的資料集,AOF檔案的體積要大於RDB檔案,資料恢復也會比較慢;
- 根據所使用的fsync策略,AOF的速度可能會慢於RDB。 不過在一般情況下,每秒fsync的效能依然非常高;
RDB和AOF如何選擇
通常來說,應該同時使用兩種持久化方案,以保證資料安全。
- 如果資料不敏感,且可以從其他地方重新生成,可以關閉持久化。
- 如果資料比較重要,且能夠承受幾分鐘的資料丟失,比如快取等,只需要使用RDB即可。
- 如果是用做記憶體資料,要使用Redis的持久化,建議是RDB和AOF都開啟。
- 如果只用AOF,優先使用everysec的配置選擇,因為它在可靠性和效能之間取了一個平衡。
當RDB與AOF兩種方式都開啟時,Redis會優先使用AOF恢復資料,因為AOF儲存的檔案比RDB檔案更完整。