Redisでデータを永続的に保存する方法として、AOF(Append-Only File)RDB(Redis Database Snapshot)の2つのオプションがあります。運用環境では通常、これら2つを併用しますが、多くの開発者が次のような疑問を持つことがあります。

"AOFがデータをリアルタイムで記録するのに、RDB設定は意味があるのか?" "結局AOFが復旧優先順位を持つので、RDBは必要ないのでは?"

しかし、実際の運用環境ではRDBも必ず必要です。その理由を見ていきましょう。

Redis RDB vs AOF Infographic


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 1save 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リライト機能に関する分析が載った以前の投稿もチェックしてみてください。

Redis AOFリライト: パフォーマンス最適化とデータ保護