Redis持続化はどのようにして行われますか?RDBとAOFの比較分析

3951 ワード

redis持続化の2つの方式


Redis持続化にはRDBとAOFの2つの方式がある

一、redis持続化----二つの方式


1.redisは、RDB(Redis DataBase)とAOF(Append Only File)の2つの永続化方式を提供する.2、RDBは、簡単に言えば、異なる時点でredisに格納されたデータをスナップショットを生成し、ディスクなどの媒体に格納する.3、AOFは、redisが実行したすべての書き込み命令を記録し、次回のredis再起動時に、これらの書き込み命令を前から後まで繰り返し実行すれば、データ復旧を実現できるという角度を変えて持続化を実現している.4、実はRDBとAOFの2つの方式も同時に使用することができて、この場合、redisが再起動すると、AOF方式を優先してデータ回復を行うことができて、これはAOF方式のデータ回復の完全度がもっと高いためです.5、データ永続化のニーズがなければ、RDBとAOF方式を完全にオフにすることもできます.そうすると、redisはmemcacheのように純粋なメモリデータベースになります.

二、redis持続化----RDB


1、RDB方式は、redisのある時点のデータをディスクに永続化するスナップショット式の永続化方法である.2、redisはデータの永続化の過程で、まず1つの一時ファイルにデータを書き込み、永続化の過程が終わってから、この一時ファイルで前回永続化したファイルを置き換える.この機能により、スナップショットファイルは常に完全に使用可能であるため、いつでもバックアップできます.3、RDB方式の場合、redisは単独で1つのサブプロセスを作成して永続化し、メインプロセスはIO操作を行わないので、redisの極めて高い性能を確保する.4、大規模なデータの回復が必要で、データ回復の完全性に対して非常に敏感でない場合、RDB方式はAOF方式よりもっと効率的である.5、RDBには多くの利点があるが、その欠点も無視できない.データの整合性に非常に敏感である場合、RDB方式は5分ごとに永続化しても、redis障害が発生した場合、5分近くデータが失われるため、あなたには向いていません.したがって、redisは、AOFである別の持続化方法を提供している.

三、redis持久化----AOF


1、AOF、英語はAppend Only Fileで、書き換えが許可されていないファイルの追加のみが許可されています.2、先に紹介したように、AOF方式は実行した書き込み命令を記録し、データ復旧時に前から後の順にもう一度命令を実行するという簡単な方法である.3、我々はredisを配置する.confのappendonly yesはAOF機能を開くことができます.書き込み操作(SETなど)があれば、redisはAOFファイルの末尾に追加されます.4、デフォルトのAOF永続化ポリシーは毎秒fsync(fsyncはキャッシュ内の書き込み命令をディスクに記録することを指す)である.この場合、redisは依然として良好な処理性能を維持することができ、redisが故障しても、最近の1秒のデータしか失わないからである.5ログを追加するときに、ディスク容量がいっぱい、inodeがいっぱい、または電源が切れた場合にログの書き込みが不完全になり、関係なく、redisはredis-check-aofツールを提供し、ログ修復に使用できます.6.追加方式を採用しているため、何も処理しなければAOFファイルはますます大きくなる.そのため、redisは、AOFファイルのサイズが設定した閾値を超えると、AOFファイルのコンテンツ圧縮を開始し、データを復元できる最小命令セットのみを保持するAOFファイル書き換え機構を提供する.例を挙げると、INCRコマンドを100回呼び出すと、AOFファイルに100個のコマンドが格納されますが、これは明らかに非効率で、この100個のコマンドをSETコマンドに統合することができます.これが書き換えメカニズムの原理です.7、AOF書き換えを行う場合は、やはり一時ファイルを先に作成し、すべて完了してから置き換えるプロセスを採用しているので、電源が切れたり、ディスクがいっぱいになったりしてもAOFファイルの可用性に影響を与えないので、安心してください.8、AOF方式のもう一つの利点は、一つの「シーン再生」によって説明する.ある同級生がredisを操作していたとき、うっかりFLUSHALLを実行してしまい、redisメモリのデータがすべて空になってしまったのは悲劇的なことだ.しかし、これは世界の終わりではありません.redisがAOF持続化方式を構成し、AOFファイルが書き換えられていない限り、redisを最速で一時停止し、AOFファイルを編集し、最後の行のFLUSHALLコマンドを削除し、redisを再起動すれば、redisのすべてのデータをFLUSHALL以前の状態に戻すことができます.不思議ではないでしょうか.これがAOF持続化方式のメリットの一つです.しかし、AOFファイルが書き換えられていると、この方法でデータを復元することはできません.9、利点は多いが、AOF方式にも同様に欠陥があり、例えば同じデータ規模の場合、AOFファイルはRDBファイルより体積が大きい.また,AOF方式の回復速度もRDB方式より遅い.BGREWRITEAOFコマンドを直接実行すると、redisは既存のデータを復元できる最小限のコマンドセットを含む新しいAOFファイルを生成します.10、運が悪ければ、AOFファイルが書き損なわれる場合も、心配する必要はありません.redisはこの問題のあるAOFファイルを簡単にロードするのではなく、エラーを報告して退出します.エラーが発生したファイルを修復するには、次の手順に従います.
1.      AOF  
2.  redis-check-aof –fix    
3. diff -u          ,     
4.  redis,      AOF  

四、redis持久化----AOF書き換え


1、AOF書き換えの内部運行原理、我々は理解する必要がある.2、書き換えが始まると、redisは既存のAOFファイルを最初に読み取り、その含まれる命令を分析圧縮して一時ファイルに書き込む「書き換えサブプロセス」を作成します.3、同時に、メインワークプロセスは新しく受信した書き込み命令をメモリバッファに蓄積しながら、元のAOFファイルに書き続ける.これは元のAOFファイルの可用性を保証し、書き換え中に意外なことが起こらないようにする.4、「サブプロセスの書き換え」が完了すると、親プロセスに信号が送られ、親プロセスは信号を受け取るとメモリにキャッシュされた書き込み命令を新しいAOFファイルに追加します.5、追加が完了すると、redisは古いAOFファイルの代わりに新しいAOFファイルを使用し、その後新しい書き込み命令があれば、新しいAOFファイルに追加されます.

五、redis持続化----RDBとAOFの選択方法


1、RDBかAOFかを選択すべきかについては、公式の提案は2つの同時使用です.これにより、より信頼性の高い永続化スキームを提供することができる.2、redisのバックアップとリストアは、サードパーティのツールredis-dumpを利用することができます.

六、Redisの二つの持続化方式にも明らかな欠点がある。


1、RDBはタイミング持続化を必要とし、リスクは2回の持続間のデータを失う可能性があり、量が大きい可能性がある.2、AOFは毎秒fsync 1回ハードディスクを指令し、ハードディスクIOが遅い場合、親プロセスをブロックする.リスクは1秒以上のデータを失うことです.Rewriteプロセスでは、メインプロセスがmem-bufferにコマンドを格納し、最後にディスクを書き込むとメインプロセスがブロックされます.3、この二つの欠点は大きな痛みです.これらの痛みを解決するために、GitHubの2人のエンジニアBryana KnightとMiguel Fernándezは先日、Redisから永続的なデータを移す経験を述べた文章を書いた.
(http://www.open-open.com/lib/view/open1487736984424.html)(http://www.cnblogs.com/joeblackzqq/p/6229387.html)

一.区別する


RDB 1.永続化永続化スナップショット(実際にデータを格納何らかのフォーマット)Redisに障害が発生した場合、データ損失の粒度が大きい(永続化時間間隔(最大損失粒度は2回の永続化間の時間差である)AOF 1.格納されているのは、命令(redisの添削操作命令)Redisに障害が発生した場合、データ損失粒度が小さい(デフォルト1 s)