Redisはメモリベースのデータストレージであるため、基本的には揮発性です。Redisサーバーが再起動すると、すべてのデータが消える可能性があり、これを補うためにRedisは2つのデータ保存方式を提供します: RDB (Redis Database Snapshot)とAOF (Append-Only File)。今回は、2つの方式の特徴と違いを見て、それぞれの設定方法と長所短所を整理します。
1. RDB (Redis Database Snapshot)
RDB方式は、Redisがメモリに保存されたデータを定期的にスナップショット(Snapshot)の形でディスクに保存する方式です。Redisは設定された周期に応じてRDBファイルを生成し、このファイルを介してサーバーの再起動時にデータを復元することができます。
RDBの主要特徴
- 保存周期:
redis.conf
ファイルでsave
オプションを通じて、データをディスクに保存する周期を設定できます。例えば、save 60 1000
は60秒ごとに1000個以上のキーが変更された場合にスナップショットを生成します。
save 60 1000
- ファイル位置: RDBファイルは基本的に
dir
で指定したディレクトリに保存され、基本パスは/var/lib/redis
で、ファイル名はdump.rdb
です。
dir /var/lib/redis/
dbfilename dump.rdb
RDBの長所
- 高性能: RDB方式はRedisの性能に大きな影響を与えず、スナップショット生成周期が長い場合はCPUリソースも大きく消費しません。
- 小さいファイルサイズ: 定期的に全データをスナップショットとして記録するため、ファイルサイズが比較的小さく、バックアップ管理が容易です。
RDBの短所
- データ喪失の可能性: RDB方式は定期的に保存するため、Redisが突然停止した場合最後のスナップショット以降のデータは失われる可能性があります。
- 復元速度: RDBはすべてのデータを一度にスナップショットして保存するため、大量のデータを復元する場合、時間がかかることがあります。
RDBの適切な使用例
RDBは主にキャッシュデータのように、一定周期ごとにバックアップしても問題ない場合に適しています。リアルタイム作業キューよりも、定期的なデータバックアップが必要な場合に有利であり、Redisサーバーのパフォーマンスを維持しながら簡単にデータ保持性を確保できます。
2. AOF (Append-Only File)
AOFは、Redisのすべての書き込み作業をディスクに順次記録して持続的なデータ保持を提供します。AOFファイルはすべてのデータ変更を漏れなく記録するため、Redisサーバーが再起動してもAOFファイルを通じて完全に復元できます。
AOFの主要特徴
- コマンド記録方式: AOFファイルはすべてのデータ変更コマンドを記録します。書き込みコマンドが発生するたびにディスクに保存するため、すべてのデータ変更履歴が保存されます。
- ファイル位置と名前: AOFファイルは基本的に
appendfilename
オプションで指定した名前で保存されます。デフォルト値はappendonly.aof
で、dir
設定で指定されたディレクトリに保存されます。
dir /var/lib/redis/
appendonly yes
appendfilename appendonly.aof
- 同期周期:
appendfsync
オプションでディスクにデータを記録する周期を設定できます。
appendfsync everysec # 毎秒同期
AOFの長所
- データ保持性: すべての書き込み作業をディスクに記録するため、サーバーが突然停止しても最後の記録状態までデータを復元できます。
- 読み取りコマンドは記録しない: AOFはすべてのデータ変更コマンドのみを記録するため、不必要な読み取りコマンドはファイルに含まれず、保存スペースを節約します。

AOFの短所
- パフォーマンス低下の可能性: すべての書き込み作業をディスクに記録するため、特に
appendfsync
をalways
に設定した場合、パフォーマンスが低下することがあります。 - ファイルサイズの増加: データ変更が頻繁な場合、AOFファイルサイズが非常に大きくなる可能性があります。これを解決するために、RedisはBGREWRITEAOFコマンドを通じてAOFファイルを圧縮できます。
AOFの適切な使用例
AOFは作業キューやデータ保持が重要なアプリケーションに役立ちます。データ保持性が重要な場合、定期的な同期(everysec
)設定とともに使用して、性能とデータ保持性をバランスよく調整できます。
3. RDBとAOFの同時使用
RedisではRDBとAOF方式を同時に使用してデータ保持性と性能をバランス良く維持できます。両方の方式が有効な場合、RedisはAOFファイルを優先して復元します。
- RDB: 速く簡単にデータを保存し、スナップショット方式で基本的なバックアップを提供します。
- AOF: すべての書き込み作業を記録してデータ保持性を高めるため、データ喪失の可能性を最小限に抑えることができます。
4. Redis設定例
以下はRDBとAOFを同時に使用し、適切な性能とデータ保持性を維持する設定の例です。
# Redis基本ディレクトリとファイル設定
dir /var/lib/redis/
dbfilename dump.rdb
appendfilename appendonly.aof
# RDBスナップショット設定 (毎60秒ごとに1000個以上のキーが変更された場合、スナップショット保存)
save 60 1000
# AOF設定
appendonly yes
appendfsync everysec # 毎秒ディスク同期
# AOFファイルリライト設定 (ファイルサイズが64MB以上の場合100%増加時に自動リライト)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
おわりに
今回のポストでは、Redisの2つのデータ保存方式であるRDBとAOFについて解説しました。各方式は保存性と性能に違いがあるため、アプリケーションの特性に応じて適切な方式を選択することが重要です。次回はRedisメモリ管理と性能最適化について扱い、Redisのメモリを効率的に活用する方法を紹介する予定です。
Add a New Comment