RDB永続化方式
RDBの基本概念
- メモリ内のデータセットを定期的にディスクにスナップショットとして保存する仕組み
- Redisは専用の子プロセスをforkして永続化を実行し、一時ファイルを使用して安全にデータを保存
- メインプロセスはIO操作を行わないため高いパフォーマンスを維持可能
- デフォルトのスナップショットファイル名は
dump.rdbで、設定ファイルで変更可能
Forkプロセス
現在のプロセスと完全に同じ新しいプロセスを作成する操作。メモリ上のデータを含むすべての状態を複製
設定例:
# スナップショットのトリガー条件設定
save 900 1 # 15分間で1回以上の変更
save 300 10 # 5分間で10回以上の変更
save 60 10000 # 1分間で10000回以上の変更
# RDB関連の詳細設定
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis-snapshot.rdb
dir /var/redis/data
RDBのトリガー方法
- 設定ファイルで定義した条件を満たした場合
- 手動コマンド実行:
SAVE- ブロッキング方式で即時保存BGSAVE- 非同期でバックグラウンド保存
- サービス停止時(
SHUTDOWNコマンド)
データ復旧方法
# 設定ファイルで以下を指定
appendonly no
dbfilename backup.rdb
dir /path/to/backup
復旧時にはRedisが指定ディレクトリのRDBファイルを自動読み込みます。
特徴比較
メリット:
- 高速なデータ復旧が可能
- バイナリ形式でコンパクトに保存
デメリット:
- 最後のスナップショット以降のデータ消失リスク
- 大規模データ時のforkオーバーヘッド
AOF永続化方式
AOFの基本概念
- すべての書き込み操作をログ形式で記録
- テキストベースの追記型ファイル(デフォルト名:
appendonly.aof) - Redis起動時にAOFファイルを再実行してデータを復元
AOF設定例
appendonly yes
appendfilename "redis-command.aof"
appendfsync everysec # 同期間隔設定
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
AOFリライト機構
- ファイルサイズが増大した場合に内容を最適化
- 新しいプロセスをforkして現在のメモリ状態を反映した最小コマンドセットで再生成
- トリガー条件:
- 前回リライト時からのサイズ増加率
- 最小ファイルサイズ閾値
特徴比較
メリット:
- より詳細なデータ永続性を保証
- ログファイルの可読性が高い
デメリット:
- ファイルサイズが大きくなりやすい
- 復旧速度がRDBより遅い
運用推奨事項
- データ安全性を重視する場合は両方式を併用
- RDBはバックアップ用途、AOFはデータ整合性確保に活用
- パフォーマンスチューニングのポイント:
- AOFリライトの閾値を適切に設定(5GB以上推奨)
- RDBのバックアップ間隔を適切に設定
- レプリケーション環境でのバランシングを考慮