redis 持久化策略:
RDB:對redis中的數據周期性的持久化
優點:1、會生成多個數據文件,每個數據文件都代表了某一個時間的全部數據。非常適合做冷備。可以將數據上傳到雲服務備份。
2、RDB對redis對外提供的服務影響小,可以讓redis保持高性能。
3、相比較來說,基於RDB文件重啟恢復redis更快
AOF:對每條寫入命令作為日志。以append-only模式寫入日志。
優點:1、可以更好的保護數據不丟失,一般AOF每隔1秒,通過后台線程執行一次fsync操作。最多丟失1s數據
2、文件以append-only模式寫入,沒有io開銷。文件不容易損壞。損壞也很容易恢復。
3、AOF日志文件即使過大的時候,出現后台重寫操作,也不會影響客戶端的讀寫。因為在rewrite log的時候,會對其中的指導進行壓縮,創建出一份需要恢復數據的最小日志出來。再創建新日志文件的時候,老的日志文件還是照常寫入。當新的merge后的日志文件ready的時候,再交換新老日志文件即可。
4、日志文件可讀性強。適合做災難性的誤刪除的緊急恢復。
一般線上環境我們會將2中機制都開啟。具體的RDB策略和AOF策略都可以在redis.conf里面配置
RDB: save 60 1000 : 表示每60s有超過1000條數據更新就備份。
AOF: append-only : true 開啟aof策略
everysec: 每秒備份
auto-aof-rewrite-percentage 100 : 當aof大小膨脹到上次2倍就備份
auto-aof-rewrite-min-size 64mb : 和上面是 且 關系。 aof文件必須超過64m才會備份
通過RDB恢復數據的步驟:
先將雲服務的RDB備份數據copy到redis配置的備份目錄。然后將aof關閉(一定要關閉,否則優先從aof日志文件本分,但是如果沒有的話就創建空的。所以redis是無法加載rdb備份文件的)。然后重啟redis,此時我們redis-cli 進入redis發現redis已經自動加載備份的rdb文件數據了。這時候手動命令啟動aof。這時候redis就會備份aof日志。這啟動aof是暫時的。我們停掉redis,在配置文件中修改將aof開啟,然后再開啟,現在redis已經恢復數據,且AOF已經開啟了。