Redis:RDBとAOFの2種類の持続化機構解析


RDBとAOFの持続化の区別分析


1.RDB:Redis Database RDBモードは、単位時間でデータベースを一度永続化してdumpを生成する.rdbファイルは、コピー、編集、移動することができる.例えば、毎日1時間ごとにRDBファイルのアーカイブを行い、1ヶ月以内に毎日1回RDBスナップショットのアーカイブを行うように設定することができる.アーカイブ操作には、SAVEとBGSAVEの2つの方法があります.以下はSAVEコマンドの例です.少なくとも1000 keyが変更された場合、Redisは60秒ごとに自動アーカイブを行い、この永続化ポリシーがスナップショットになります.
SAVE 60 1000

SAVEプロセス:(1)スナップショット操作をトリガする(2)親プロセスが他のクライアントのすべての要求を停止する(3)親プロセスがデータセットのdumpへの書き込みを開始する.rdbファイル(4)の書き込みが完了すると、親プロセスは受信要求BGSAVEプロセスを再開する:(1)スナップショット操作をトリガする(2)Redisはforks関数を呼び出して親プロセスをコピーし、生成子プロセス(3)サブプロセスはデータセット(dataset)を一時RDBファイル(4)に書き込む開始した後、一時RDBファイルの名前をdumpに変更する.rdbファイルと古いファイルの置き換えの欠点:設定された実行間隔が5秒の場合、Redisサーバは実行中に問題(停電、データ溶断など)が発生し、最大5秒のデータが失われる.2、AOF:Append Only File AOFは、AOFファイルの後ろにRedisを追加する操作ログで、fsyncが全くなく、fsyncが毎秒1回、fsyncが各コマンドfsync(デフォルトは毎秒1回、fsync)が3つのメカニズムに分けられます.Redisファイルが大きすぎると、redisはバックグラウンドで自動的にrewriteをオンにするか、BGREWRITEAOFコマンドで手動でrewriteをオンにします.
rewrite:AOFファイルが大きすぎる場合、RedisはAOFファイルを分析し、最も短いコマンドでデータを記録し、書き換えが完了した後にファイルの名前を変更すればいい。以下のフロー分析では書き換え過程を詳しく説明する。

たとえば、fsyncを1秒に1回オンにすると、書き込み操作がタイミングよく実行されます.アーカイブ操作には、redisで起動/コマンドトリガの2つの方法がある.confプロファイルに追加:
appendonly yes

または実行コマンド:RDB方式をAOFに切り替え、2.2バージョン以降の
redis-cli config set appendonly yes
redis-cli config set save ""

注意:redis-cli config set save""コマンドはRDBポリシーを閉じるためであり、2つの永続化ポリシーを同時に開く必要がある場合は、2番目のコマンドは実行しなくてもよい。

2つの方式の違い:(1)redis.confプロファイルにappendonly yes情報を追加し、redisが起動すると起動します.(2)コマンド設定のAOF持続化方式によりredis再起動後にAOFを閉じる.フロー解析:(1)書き換え操作をトリガする(2)Redis親プロセスはforks関数をトリガし、子プロセスをコピーする(3)子プロセスは一時的なAOFファイルを作成し、古いAOFファイルのデータ解析を最も短いコマンドに解析する(4)親プロセスが受信した要求をメモリのバッファに一時保存する(5)子プロセスがデータ書き換えを完了した後、親プロセスに子プロセス完了情報を受信することを通知した後、バッファの操作を新しいAOFファイル(7)Redisに追加原子操作でAOFファイルの名前を変更し、新しいファイルの使用を開始
AOFファイルが切断されたらどうしますか?AOFファイルを書き込むとサーバがクラッシュするか、書き込み時にAOFファイルを格納するvolumeがいっぱいになる可能性があります.この場合、AOFには、データセットの指定された時点バージョンを示す一貫したデータが含まれます(デフォルトのAOF fsyncポリシーを使用します.このデータは1秒で期限切れになる可能性があります).しかし、AOFの最後のコマンドは切断される可能性があります.Redisの最新のプライマリ・バージョンでは、ファイルの最後のフォーマットが正しくないコマンドを破棄するだけでAOFをロードできます.AOFが壊れたらどうする?AOFファイルがトランケートされるだけでなく、途中で無効なバイトシーケンスによって破損している場合、状況はさらに複雑になります.最善の方法は、redis-check-aofユーティリティを実行し、–fixオプションを持たずに問題を理解し、ファイル内の所定のオフセットにジャンプし、ファイルを手動で修復できるかどうかを確認することです.AOFはRedisプロトコルと同じフォーマットを使用し、手動で修復するのは簡単です.-fixパラメータを使用してファイルを修復することもできますが、無効な部分からファイルの末尾までのすべてのAOF部分が破棄される可能性があります.破損がファイルの初期部分にある場合、大量のデータが失われます.
最後に、RDBとAOFの2つの戦略はどちらもよりよくなく、通常は実際の応用の中で1つのオープンで、共同で使用されています.AOFが記録したデータは相対的に完全であるため、起動時にRedisはAOFファイルを優先的に読み出す.データ復旧時には通常RDBが使用される.RDBファイルはバックアップ後にある時間ノードのデータを記録しやすく、災害対応に使用できるからである.
参考:redis公式ドキュメント