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文件更完整。