Redisでデータを永続的に保存する方法として、AOF(Append-Only File)とRDB(Redis Database Snapshot)の2つのオプションがあります。運用環境では通常、これら2つを併用しますが、多くの開発者が次のような疑問を持つことがあります。
"AOFがデータをリアルタイムで記録するのに、RDB設定は意味があるのか?" "結局AOFが復旧優先順位を持つので、RDBは必要ないのでは?"
しかし、実際の運用環境ではRDBも必ず必要です。その理由を見ていきましょう。
1. AOFファイルが損傷する可能性がある
AOFはすべての変更を記録しますが、ファイル損傷のリスクがあります。ディスク障害、運用中の障害、誤ったファイル移動などによってAOFファイルが破損すると、復旧が難しいことがあります。
redis-server --appendonly yes
Redisを再起動する際にAOFファイルが損傷している場合、データ復元が不可能になることがあります。このような場合、RDBバックアップがあれば、最低限のデータでも復旧できることがあります。
✅ AOFだけを使用してファイルが損傷した場合は? データ損失リスクが増加
✅ RDBがあれば? 最低限のデータでも復旧可能
2. AOFの復旧速度が遅い
AOFはすべての変更を一つずつ再実行しながら復旧しなければなりません。データが多いほど、Redisの再起動時に復旧時間が長くなる可能性があります。
例えば、AOFファイルが2GBの場合、Redisは数百万のSETコマンドを実行する必要があります。対照的に、RDBは単にダンプファイルをロードする方式なので、非常に早く復旧できます。
✅ AOFだけを使用すると? 復旧時間が長くなるリスクあり
✅ RDBを併用すると? 迅速な復旧が可能
3. RDBはバックアップおよびサーバーマイグレーションに有利
運用環境でデータバックアップを行う際、AOFはファイルサイズが大きく、ログ形式なので活用が難しいです。一方、RDBはファイルサイズが小さく、特定の時点のデータをそのまま保持できるため、バックアップがはるかに容易です。
✔ RDBを活用したバックアップ例:
cp /var/lib/redis/dump.rdb /backup/dump-2025-02-17.rdb
✔ 別のサーバーへのデータ移行例:
scp /var/lib/redis/dump.rdb new-server:/var/lib/redis/
✅ AOFはデータが多いほどバックアップが難しい
✅ RDBは特定の時点のデータを迅速にバックアップおよび復元するのに有利
4. ディスクI/Oの負担を軽減できる
AOFはすべての変更をディスクに記録しなければならないため、ディスクI/Oの負担が大きいです。一方、RDBは定められた周期ごとに一度だけ保存するため、ディスクへの負荷が少ないです。
✅ AOFだけを使用すると? ディスクの負担が増加する可能性
✅ RDBと併用すると? パフォーマンスの最適化が可能
5. 運用環境で推奨するRDB + AOF設定
運用環境では、次のような設定を推奨します。
# RDBスナップショット設定 (条件を満たした場合、データをディスクに保存)
# save <seconds> <changes> [<seconds> <changes> ...]
save 900 1 300 10 60 10000
# 900秒(15分)の間に1回以上のキーチェンジがあった場合、または300秒(5分)の間に10回以上のキーチェンジがあった場合、または60秒(1分)の間に10,000回以上のキーチェンジがあった場合に保存
# AOFを有効化
appendonly yes
appendfsync everysec # 毎秒ディスクに書き込み、パフォーマンスと安定性のバランスを維持
# AOFファイルサイズ自動最適化 (リライト)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
🔍 複数のsave
条件はどのように評価されるのか?
Redisではすべてのsave
条件がOR条件として機能します。つまり、いずれかの条件を満たせばスナップショットが保存されます。
✔ 例1: save 900 1
とsave 60 10000
が設定された場合 - 900秒間に1以上のキーチェンジがあるか - 60秒間に10,000以上のキーチェンジがあると - RDBスナップショットが保存されます。
✔ 例2: save 300 10
条件が追加された場合 - 300秒間に10以上のキーチェンジがあるか - 900秒間に1以上の変更があるか - 60秒間に10,000以上の変更があると - RDBスナップショットが保存されます。
✅ すべてのsave
オプションはOR条件として評価される
✅ いずれかの条件を満たせば即座にRDBが保存される
結論: AOFがあってもRDBは必須である
✅ AOFだけではデータ保護が完全ではない
✅ AOFが損傷した場合、RDBが最後のバックアップ役を果たす
✅ AOF復旧速度が遅くなる可能性があるため、RDBを活用すれば迅速に復旧可能
✅ RDBはバックアップやサーバーマイグレーションに有利
✅ ディスクI/Oの負担を減らし、パフォーマンスを最適化できる
✅ save
設定はOR条件として動作し、いずれかでも満たせばRDBが保存される
したがって、運用環境ではRDB + AOFを併用することが最も安全で最適な方法です。
右側の検索バーを通じて`Redis`を検索してみてください!Redisに関連する他の投稿も用意されています。
AOFリライト機能に関する分析が載った以前の投稿もチェックしてみてください。
Add a New Comment