首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Redis 持久化深度解析:RDB 快照與 AOF 日誌完整配置指南

     編輯:Java 綜合教學

Redis 持久化深度解析:RDB 快照與 AOF 日誌完整配置指南

Redis 提供兩種持久化機制,可單獨或組合使用。本文詳細解析 RDB 與 AOF 的原理、配置參數、優缺點及運維注意事項。

一、兩種機制對比

特性RDBAOF
機制定時快照,將鍵值二進位序列化寫入檔案追加每條寫命令到日誌檔案
優點效能高、檔案緊湊、恢復快資料安全性高、可秒級同步
缺點可能丟失最後一次快照後的資料檔案較大、恢復慢、頻繁 fsync 影響效能
適用場景備份、災難恢復、主從同步業務核心資料、需極低資料丟失容忍度

二、RDB 核心配置 (redis.conf)

# 觸發條件:任一滿足即執行 bgsave
save 900 1      # 900 秒內至少 1 個 key 變化
save 300 10     # 300 秒內至少 10 個 key 變化
save 60 10000   # 60 秒內至少 10000 個 key 變化

# bgsave 失敗時是否拒絕寫入
stop-writes-on-bgsave-error yes

# 啟用 LZF 壓縮(字串 >= 21 字節才壓縮)
rdbcompression yes

# 載入時檢查 checksum
rdbchecksum yes

# 檔案名與目錄
dbfilename dump.rdb
dir ./

關鍵細節

  • 所有 save 條件由後台執行緒 bgsave 執行,不阻塞主執行緒。
  • Redis 內部維護 dirty(上次 bgsave 後修改數)與 lastsave(上次成功時間),條件判斷基於此兩值。
  • 註解掉所有 save 行可禁用 RDB。
  • RDB 檔案結構:REDIS 魔數 + 版本號 + 多資料庫鍵值 + EOF + 8 字節 checksum。
  • 啟動時若無 AOF,自動載入 RDB 並阻塞客戶端直到完成。

三、AOF 核心配置 (redis.conf)

appendonly no                    # 是否開啟
appendfilename "appendonly.aof"  # 檔案名

# 同步策略(三選一)
# appendfsync always     # 每命令 fsync,最安全最慢
appendfsync everysec       # 每秒 fsync,折中(推薦)
# appendfsync no         # 交給 OS,最快但可能丟數據

# RDB 期間是否暫停 AOF fsync
no-appendfsync-on-rewrite no

# AOF 重寫觸發條件(需同時滿足)
auto-aof-rewrite-percentage 100  # 檔案增長 100%(變 2 倍)
auto-aof-rewrite-min-size 64mb   # 且檔案 >= 64 MB

AOF 重寫機制

  • 目的:將多條對同一 key 的操作合併為單一指令,縮小檔案、加速恢復。
  • 由後台子進程 bgrewriteaof 執行,不阻塞主執行緒。
  • 重寫期間新寫入命令同時寫入「AOF 重寫緩衝區」與舊 AOF 緩衝區;重寫完成後,主執行緒將重寫緩衡區內容追加到新檔案並原子替換。
  • 替換瞬間會短暫阻塞主執行緒。

四、RDB + AOF 混合使用策略

  • 同時啟用時,持久化兩者皆執行;恢復時優先載入 AOF,RDB 忽略。
  • bgsave 與 bgrewriteaof 不會並行:若一個在跑,另一個排隊或捨棄(bgsave 捨棄)。
  • 建議:關鍵業務開啟 AOF(everysec),定期備份 RDB 供災難恢復。

五、運維建議

  1. 監控 aof_current_size、aof_rewrite_in_progress 等指標。
  2. 定期檢查 RDB/AOF 檔案完整性(redis-check-rdb、redis-check-aof)。
  3. 主從架構下,從節點可僅開啟 AOF,主節點視業務決定。
  4. 避免在高負載時手動觸發 BGSAVE/BGREWRITEAOF。

六、總結

RDB 適合備份與快速重啟,AOF 適合資料安全。生產環境建議「AOF everysec + 定期 RDB 備份」,兼顧效能與可靠性。深入理解重寫機制與配置參數,是 Redis 運維的核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved