Redis – 持久化
Redis 的持久化方式有兩種:RDB、AOF
RDB
RDB 是某個時間點數據的快照,可以定期全量備份。
原理:
- 父進程 fork 子進程
- 子進程將數據寫入臨時 RDB 文件中
- 子進程完成寫入時,用臨時 RDB 替換掉舊的 RDB
- 假如1點開始備份數據,1點以後的數據不會被備份,因為子進程看不到父進程的數據
優點:恢復速度快。
缺點:窗口期數據易丟失。
AOF
AOF 記錄每次寫操作的日誌。
如果每次寫操作都記錄日誌,最終的 AOF 文件就會無限大,如何解決這個問題呢?
- 重寫。Redis 擇時將記憶體中的數據備份到臨時 AOF 文件中,備份時點之後的數據先寫到快取中,臨時 AOF 文件完成寫入之後,再將快取中的數據寫入臨時 AOF 文件,最後用臨時 AOF 文件替換掉舊的 AOF 文件。
- 從 4.x 版本開始 AOF 文件支援 RDB+AOF 的混合體,重寫是寫 RDB,然後在 AOF 文件開頭記錄 RDB 文件的資訊。
優點:丟失數據少