ホームページ  >  記事  >  データベース  >  Redis 永続化メカニズムの分析例

Redis 永続化メカニズムの分析例

王林
王林転載
2023-06-01 22:30:071404ブラウズ

Redis はデータをメモリに保存するため、プロセスが終了するとデータは失われます。 Redis の永続化メカニズムを通じて、メモリ内のデータをディスクに保存したり、再起動後にディスク ファイルからデータをロードしてメモリを補充したりできます。

Redis は、フル ミラー RDB と増分永続性 AOF という 2 つの永続化メカニズムをサポートしています。

RDB は Redis のスナップショットであり、期限切れになっていないすべてのキーと値のペアを Redis に保存します。

redis.conf:

dbfilename dump.rdb
dir /var/lib/redis



save 900 1 save 300 10 save 60 10000 save "" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes

で RDB を構成する Redis プロセスが開始されるたびに、まず rdb ファイルが存在するかどうかが確認され、存在する場合は、ファイルの内容をメモリに取り込みます。

redis は RDB ファイルを自動更新する際、サブプロセスをフォークしてスナップショット保存を実行しますが、保存期間中はメインプロセスは通常通りサービスを提供できます。

コマンドを使用してスナップショットを保存することもできます:

  • save: ブロック方式でスナップショットを保存すると、redis は他のリクエストを処理できなくなります。保存期間中

  • bgsave: 子プロセスをフォークして保存作業を完了します。保存期間中、redis の通常のサービスは影響を受けません。

lastsave コマンドは、最新の RDB ファイル作成タイムスタンプを取得でき、保存が成功したかどうかを確認するために使用できます。

RDB はデータベースのスナップショットであり、作成されるたびにデータベース全体をファイルに書き込む必要があります。これは非常に時間がかかる操作であるため、頻繁に実行するのは難しく、例外が発生すると大量のデータが失われる可能性があります。

Redis は、増分永続化ツール AOF (Append Only ile) を提供します。AOF は、Redis データベース内のすべての書き込み命令を記録することによって永続化を実行します。命令は、Redis 通信プロトコルの形式で AOF ファイルに保存されます。

Redis プロセスが開始されると、AOF ファイルが存在するかどうかがチェックされ、存在する場合は、AOF 内の命令が順番に実行されてデータが復元されます。

Redis は、書き込みコマンドを実行するたびに AOF ファイルにログを追加しますが、新しいレコードはすぐにディスク (fsync) に書き込まれず、書き込みバッファーにキャッシュされます。

データ損失を避けるために、バッファ内のデータをディスクに書き込む戦略を構成できます。

バッファ内のデータをディスクに書き込むのは時間のかかる操作です。頻繁にディスクに書き込むとパフォーマンスに影響しますが、Redis がクラッシュして失われるデータが少なくなるため、アプリケーションのシナリオに基づいてトレードオフを行う必要があります。

AOF は冗長な命令を記録する可能性があります。同じキーに対して set 命令を 100 回実行すると、AOF ファイルには 100 個のレコードが存在しますが、データを回復するために保持されるのは最後の set 命令だけです。 AOF を書き換えると、AOF ファイルが整理され、不要なコマンド ログがクリーンアップされ (上書きされた set コマンドの削除など)、AOF ファイルのサイズが削減されます。

redis はバックグラウンドでの書き換え戦略を採用しています。つまり、子プロセスをフォークして、ソートされた AOF を一時ファイルに書き込みます。 BGREWRITEAOF を使用して、バックグラウンド書き換え操作を手動でトリガーします。

実際には、AOF の書き換えでは元の AOF ファイルは読み取られません。子プロセスは現在のデータのコピーを持ち、そのコピーに基づいて新しい AOF ファイルを直接生成します。

書き換え期間中、メイン プロセスは新しい書き込み操作を元の AOF ファイルと AOF 書き換えキャッシュに書き込みます。書き換えが失敗した場合でも、元の AOF ファイルには完全なデータが保存されます。子プロセスが AOF 書き換えを完了すると、メイン プロセスにシグナルを送信します。シグナルを受信したメイン プロセスは、AOF 書き換えキャッシュの内容を新しい AOF ファイルに書き込み、元のファイルを新しい AOF ファイルで上書きします。 AOFファイル。

Configure AOF in redis.conf:

appendonly yes  
  

appendfilename appendonly.aof  
  


appendfsync everysec 

    no-appendfsync-on-rewrite no   
  


auto-aof-rewrite-percentage 100  
  

auto-aof-rewrite-min-size 64mb

Redis は、起動時または最後の書き換え後に AOF ファイルのサイズを記録します。元のサイズの 100% に達すると (auto-aof-rewrite-percentage 構成)、再書き込みがトリガーされます。

書き換え操作は、現在の AOF ファイル サイズが auto-aof-rewrite-min-size より大きい場合にのみ実行されます。それ以外の場合は、新しいデータの量が指定されたパーセンテージを超えても、書き換えは実行されません。これにより、元のファイルが小さすぎるために発生する頻繁な初期書き換えの問題が回避されます。

以上がRedis 永続化メカニズムの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。