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 檔案的資訊。
優點:丟失資料少