1. 概要
Redis はメモリベースのデータベースです。そのデータはメモリに保存されます。メモリに関する問題の 1 つは、サービスがシャットダウンされるか電源がオフになると、データが失われることです。
Redis データはハードディスクへの書き込みもサポートしており、このプロセスは永続化と呼ばれます。
Redis は 2 つの異なる形式の永続性を提供します
- RDB(Redisデータベース)
- AOP(ファイルの追加)
2、RDB(Redisデータベース)
2.1. RDBとは何ですか?
指定された時間内にメモリ内のデータセットのスナップショットをディスクに書き込みます (専門用語ではスナップショットスナップショットと呼ばれます)。復元時には、主要なスナップショットファイルがメモリに直接読み込まれます。
2.2. バックアップの実行方法
Redis は永続化のために子プロセスを個別に作成 (フォーク) し、最初にデータを一時ファイルに書き込み、永続化プロセスが終了した後、この一時ファイルを使用して最後に永続化されたファイルを置き換えます。プロセス全体を通じて、メイン プロセスは IO 操作を実行しないため、非常に高いパフォーマンスが保証されます。大規模なリカバリが必要で、データ リカバリの整合性がそれほど重要ではない場合は、RDB
方式または AOF 方式の方が RDB の欠点は、最後の永続化以降のデータが失われる可能性があることです。
2.3、フォーク
- fork の機能は、現在のプロセスと同じプロセスをコピーすることであり、新しいプロセスのすべてのデータ (変数、環境変数、プログラム カウンタなど) は元のプロセスと同じです。
- Linux プログラムでは、fork() によって親プロセスとまったく同じ子プロセスが生成されますが、子プロセスはその後実行システムを呼び出すことが多く、効率性を考慮して Linux では「コピーオンライト技術」が導入されています。
- 一般に、親プロセスと子プロセスは物理メモリを共有し、プロセス空間の各セクションの内容が変更された場合にのみ、親プロセスの内容が子プロセスにコピーされます。
2.4、RDB永続化プロセス
2.5. バックアップファイル名の指定
redis.conf では、次のように rdb バックアップ ファイルの名前を変更できます。デフォルトは dump.rdb です。
2.6. バックアップファイルを保存するディレクトリの指定
redis.conf では、rdb ファイルの保存ディレクトリを変更できます。デフォルトは、次のように Redis 起動コマンドが配置されているディレクトリです。
2.7. RDB バックアップのトリガー
2.7.1. 方法 1: 自動バックアップ、バックアップ ルールを設定する必要がある
自動バックアップ ルールは redis.conf で設定できます。デフォルトのルールは次のとおりです。
save はバックアップ ルールを構成するために使用されます
保存の形式: 保存秒間の書き込み操作の数
デフォルトは、1 分以内に 10,000 回のリビジョン、5 分以内に 10 回のリビジョン、または 30 分以内に 1 回のリビジョンです。
例: 20 秒以内に 3 回以上のキー変更があった場合、バックアップが実行されます。
save 20 3
2.7.2、方法 2: コマンドバックアップを手動で実行する (save | bgsave)
バックアップをトリガーするには 2 つのコマンドがあります。
save:保存するときにのみ保存し、他のものは無視します。すべてブロックされており、手動保存は推奨されません。
bgsave: Redis はスナップショット操作をバックグラウンドで非同期に実行し、スナップショットはクライアントの条件にも応答できます。
lastsave コマンドを使用すると、最後に成功したスナップショットの時刻を取得できます。
2.7.3. モード 3: flashall コマンド
flashall コマンドを実行すると dump.rdb ファイルも生成されますが、これは空で意味がありません。
2.8、redis.conf のその他の構成
2.8.1、stop-writes-on-bgsave-error: ディスクがいっぱいになった場合、redis の書き込み操作を閉じるかどうか
stop-writes-on-bgsave-error は、redis をディスクに書き込めない場合に、redis の書き込み操作を直接オフにするかどうかを指定するために使用されます。はいを推奨します。
2.8.2、rdbcompression: rdb バックアップの圧縮を有効にするかどうか
ディスクに保存されている rdb スナップショット ファイルについては、圧縮するかどうかを設定できます。圧縮する場合、redis は LZF アルゴリズムを使用してファイルを圧縮します。
より小さな CPU で圧縮を実行したくない場合は、この機能を無効にするように設定できます。はいを推奨します。
2.8.3、rdbchecksum: rdbバックアップファイルの整合性をチェックするかどうか
スナップショットを保存した後、Redis に CRC64 アルゴリズムを使用させてデータ検証を行うこともできますが、これによりパフォーマンスの消費が約 10% 増加します。パフォーマンスを最大限に向上させたい場合は、この機能をオフにすることができます。
はいをお勧めします。
2.9、rdb のバックアップとリカバリ
2.9.1. まず、config get dir を使用して rdb ファイルのディレクトリをクエリします。
2.9.2、rdb バックアップ ファイル *.rdb ファイルを別の場所にコピーします
cp dump.rdb dump2.rdb
2.9.3. rdbのリカバリ
- Redisを閉じる
- まず、バックアップ ファイルを作業ディレクトリ cp dump2.rdb dump.rdb にコピーします。
- redisを起動するとバックアップデータが直接ロードされ、データが復元されます
2.10. 利点
- 大規模なデータ復旧に最適
- データの整合性と一貫性の要件がそれほど高くない場合の使用に適しています。
- ディスクスペースを節約する
- 早い回復
2.11 欠点
- フォークすると、メモリ内のデータが複製され、約 2 倍の拡張が行われるため、これを考慮する必要があります。
- Redis はフォーク中にコピーオンライト技術を使用しますが、データが巨大な場合は依然としてパフォーマンスを消費します。
- バックアップ サイクル中に一定の間隔でバックアップを作成するため、Redis が予期せずダウンした場合、最後のスナップショット以降の変更はすべて失われます。
2.12. RDBを停止するにはどうすればよいですか?
RDB を動的に停止します: redis-cli config set save "" #save を実行し、保存戦略が無効であることを示す null 値を指定します。