redisの5持続化機構(AOFとRDB)

2186 ワード

redis中国語公式サイト:redis持続化
redisは2つの持続化方式をサポートする:RDB方式とAOF方式
一、RDB方式
デフォルトでは、Redisはdump.rdbという名前のバイナリ・ファイルにデータベース・スナップショットを保存します.Redisは、「N秒以内にデータセットが少なくともM個変更される」という条件が満たされたときに、自動的にデータセットを保存するように設定できます.また、SAVEまたはBGSAVEを呼び出して、Redisにデータセット保存操作を手動で行わせることもできます.
save 60 1000   //60      1000      ,         

DRB動作原理:Redisがdumpを保存する必要がある場合.rdbファイルの場合、サーバは次の操作を行います.
  • Redis呼び出しforks.親プロセスと子プロセスが同時に存在します.
  • サブプロセスは、データセットを一時RDBファイルに書き込む.
  • サブプロセスが新しいRDBファイルの書き込みを完了すると、Redisは新しいRDBファイルで元のRDBファイルを置き換え、古いRDBファイルを削除する.

  • RDBがRDBファイルを保存するときに親プロセスが唯一しなければならないのはforkがサブプロセスを出すことであり、次の仕事はすべてサブプロセスによって行われ、親プロセスは他のIO操作をする必要がないので、RDB持続化方式はredisの性能を最大化することができる.この動作により、Redisは (copy-on-write)機構から利益を得ることができる.
    二、AOF方式(Append-only file)
    Redis AOF方式の持続化はappendonlyパラメータによって開くことができる.
    appendonly yes

    AOF永続化をオンにすると、Redisのデータを変更するコマンドが実行されるたびに、Redisはハードディスク(HDD)のAOFファイルに変更コマンドを書き込みます.AOFファイルの保存場所はRDBファイルの保存場所と同じでdirパラメータで設定可能であり、デフォルトのファイル名はappendonlyである.conf、appendfilenameパラメータで変更できます.
    appendfilename appendonly.aof

    デフォルトでは、システムは30秒ごとに同期操作を実行し、ハードディスクキャッシュの内容をハードディスクに実際に書き込む.この30秒の間にシステムが異常に終了すると、ハードディスクキャッシュのデータが失われます.
    AOF動作原理AOF書き換えはRDBがスナップショットを作成するのと同じように、書き込み時コピーメカニズムを巧みに利用している.
  • Redis forkはサブプロセスを生成します.
  • サブプロセスは、新しいAOFファイルの内容を一時ファイルに書き込むことを開始する.
  • 新しく実行されたすべての書き込みコマンドについて、親プロセスはそれらをメモリキャッシュに蓄積しながら、これらの変更を既存のAOFファイルの末尾に追加し、書き換えの途中でダウンタイムが発生しても、既存のAOFファイルは安全である.
  • サブプロセスが書き換えを完了すると、親プロセスに信号が送信され、親プロセスは信号を受信した後、メモリキャッシュ内のすべてのデータを新しいAOFファイルの末尾に追加します.
  • できました!現在、Redisは古いファイルを新しいファイルに原子的に置き換え、その後、すべてのコマンドが新しいAOFファイルの末尾に直接追加されます.

  • 三、どのようにしてどの持続化方式を選択しますか?
    数分以内のデータ損失に耐えられる場合は、RDB永続化のみを使用できます.
    公式には、AOF永続化のみを使用することは推奨されていません.これは、RDBスナップショット(snapshot)のタイミング生成がデータベースバックアップに非常に便利であり、RDBのリカバリデータセットの速度もAOFのリカバリよりも速いためです.このほか、RDBを使用すると、前述したAOFプログラムのバグを回避することができます.