Redis 提供兩種持久化機制,可單獨或組合使用。本文詳細解析 RDB 與 AOF 的原理、配置參數、優缺點及運維注意事項。
| 特性 | RDB | AOF |
|---|---|---|
| 機制 | 定時快照,將鍵值二進位序列化寫入檔案 | 追加每條寫命令到日誌檔案 |
| 優點 | 效能高、檔案緊湊、恢復快 | 資料安全性高、可秒級同步 |
| 缺點 | 可能丟失最後一次快照後的資料 | 檔案較大、恢復慢、頻繁 fsync 影響效能 |
| 適用場景 | 備份、災難恢復、主從同步 | 業務核心資料、需極低資料丟失容忍度 |
# 觸發條件:任一滿足即執行 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 執行,不阻塞主執行緒。dirty(上次 bgsave 後修改數)與 lastsave(上次成功時間),條件判斷基於此兩值。save 行可禁用 RDB。REDIS 魔數 + 版本號 + 多資料庫鍵值 + EOF + 8 字節 checksum。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
bgrewriteaof 執行,不阻塞主執行緒。bgsave 與 bgrewriteaof 不會並行:若一個在跑,另一個排隊或捨棄(bgsave 捨棄)。aof_current_size、aof_rewrite_in_progress 等指標。redis-check-rdb、redis-check-aof)。BGSAVE/BGREWRITEAOF。RDB 適合備份與快速重啟,AOF 適合資料安全。生產環境建議「AOF everysec + 定期 RDB 備份」,兼顧效能與可靠性。深入理解重寫機制與配置參數,是 Redis 運維的核心技能。