ホームページ  >  記事  >  データベース  >  Redis 永続化のフルバージョン

Redis 永続化のフルバージョン

咔咔
咔咔オリジナル
2020-05-27 11:04:391730ブラウズ


永続性の概要

RDB

AOF

RDB と AOF

の違い永続化アプリケーションのシナリオ


永続化関数の場合、実際には非常に単純であり、それほど複雑ではありません


デモ環境


##centos7.0

redis4.0

redis 格納ディレクトリ:/usr/local/redis

redis.conf 保存ディレクトリ:/usr/local/redis/data


##1. 永続性の概要


redis 内のすべてのデータはメモリに保存されるため、redis がクラッシュするとデータが失われます。 Redis の永続化とは、データをディスクに保存することです。永続的なストレージ メディアを使用してデータ プロセスを保存し、特定の時点で保存されたデータを復元する動作メカニズムは、永続性と呼ばれます。


永続化プロセスでは何が保存されますか?


#最初のスナップショット フォームはデータ結果を保存し、データ (以下で説明する RDB) に焦点を当てます。


2 番目のタイプの操作プロセスであるストレージ操作プロセスは、以下で説明する AOF であるデータ操作プロセスに焦点を当てています


##2. RDB


2-1 RDB起動モード -- コマンドの保存


以下の図はredis.confの設定情報です。実行後 保存後、dump.rdb ファイルが生成されます。

Redis 永続化のフルバージョン#値を設定して、/usr/local/redis に保存します。 /data ファイル dump6379.rdb が存在します。

Redis 永続化のフルバージョン


2-2 RDB保存の使い方


  • dbfilename dump6379.rdb: RDB ファイル名を設定します。デフォルト値は dump.rdbです。
  • dir: rdb または aof ファイルを保存するパス
  • rdbcompression yes:保存時にデータを圧縮します。デフォルトは、lzf 圧縮を使用して、yes です。
  • rdbchecksum yes: RDB ファイル形式の検証を実行するかどうかを設定します。この検証プロセスは、ファイルの書き込みと読み取りの両方で実行されます


2-3 RDB データ復旧


実は、他のリレーショナル データベース復旧と比較して、このデータ復旧は基本的に操作が必要ありません。再起動してください


2-4 RDB -- 保存コマンドの仕組み


保存を実行すると、 Redis を要求する他のクライアントからの命令は、保存命令が完了するまで待機します。保存命令はシングルスレッドで実行されるため、実行時間が長すぎると、他のユーザーが正常にデータを保存できなくなる原因となります。したがって、このコマンドはデフォルトでは放棄されます。以下で紹介する bgsave が代わりに使用されます


2-5 RDB -- bgsave コマンドの仕組み


Redis 永続化のフルバージョン

bgsave が Redis で実行される場合バックグラウンド保存が開始されたことを直接返します


#現時点ではログ ファイルを確認しています。bgsave コマンドは、保存ブロックの問題に対して最適化されています

Redis 永続化のフルバージョン


#2-5 RDB -- 設定ファイルの自動起動


#
以下配置是默认配置
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes


Redis 永続化のフルバージョン

#save [時間] [キー変更量]


つまり、300 秒以内に 10 個のキー値が変更された場合、bgsave がバックグラウンドで実行されます


##3. AOF


3-1 AOF の概念

AOF ファイルにはコマンドの操作を実行するプロセスが格納されており、データの復旧もその操作プロセスを使用して行われます。



3-2 AOFデータ書き込み処理

Redis 永続化のフルバージョン

#redis コマンドを実行します


##redis の AOF によってコマンド バッファーが更新されます


その後、特定の方法に従って redis.conf に設定された .aof ファイルに同期します


3-3 AOF 書き込みデータ 3 つの戦略


##常に: 実行されたコマンドは AOF ファイルに保存されますが、データ エラーはなく、パフォーマンスは低下します。

# の使用は推奨されません。 ## Everysec: バッファ内の命令を毎秒 AOF ファイルに同期します。データの精度とパフォーマンスが高くなります。推奨されており、デフォルトの構成でもあります。ただし、システムが突然クラッシュすると、1 秒以内のデータが失われます。
    #いいえ: AOF ファイルへの各同期のサイクルはオペレーティング システムによって制御されており、プロセス全体は制御できません


3-4 AOF 機能がオンになりました


  • Configuration: appendonly yes|no
  • Function: AOF 永続化機能を有効にするかどうか、デフォルトは無効です
  • Configuration: appendfsync always| Everysec | no
  • 関数: AOF 書き込みデータ戦略
  • 構成: appendfilename filename
  • 関数: AOF 永続ファイル名、デフォルト名は appendonly.aof です。


Redis 永続化のフルバージョン

次に、redis サービスを再起動します。usr/local/redis/ を使用できます。 data ディレクトリ 以下に appendonly.aof ファイルが表示されます。

Redis 永続化のフルバージョン

次に、redis クライアントでコマンドを実行してチェックアウトします。データが appendonly.aof ファイルに保存されることがわかります。

Redis 永続化のフルバージョン


#3-5 AOF 書き込みデータに関する問題


まずケースを見てみましょう。名前キーを繰り返し設定した後、appendonly.aof ファイルを開いて表示しました。3 つの操作があることがわかりますが、これら 3 つの操作はすべて 1 つのキーで変更されています。最後のキーだけを保存することはできないでしょうか?この質問では、引き続き下を見ていきます

Redis 永続化のフルバージョン


##3-6 AOF 書き換え


#たとえば、上記では set name コマンドを 3 回実行しましたが、最終的に必要なのは最後の実行の記録だけです。つまり、最後の実行レコードのみが必要です。他のレコードは必要なく、圧縮データは aof ファイルに書き換えられます。


書き換え後、ディスク使用率が向上しました

また、データ復旧の速度も速くなります

永続化の効率も向上します


3-7 AOF 書き換えルール


  • プロセス内のタイムアウトしたデータはファイルに書き込まれなくなります
  • del、## などの削除命令を無視します。 #hdel、srem。また、「3-5. キーに対する連続操作」で述べた問題もあります。
  • 同じデータの複数の書き込みレコードが 1 つのレコードにマージされます:
  • lpush list a lpush lsit b lpush list clpush list a b c に変換できます。


#3-8 AOF 手動書き換え


コマンド:

bgrewriteaof


質問 3 ~ 5 に従って、コマンド ラインで bgrewriteaof コマンドを実行し、appendonly.aof ファイルを表示します


実行後、ファイルが小さくなり、ファイル内に命令が 1 つしかないことがわかります。

##

Redis 永続化のフルバージョン


3-9 AOF 手動書き換えの動作原理


Redis 永続化のフルバージョン

##3-10 AOF 自動書き換え


構成:

auto -aof-rewrite-percentage 100 | auto-aof-rewrite-min-size 64mb

トリガー比較パラメーター: aof_current_size | aof_base_size

##

いつ aof_current_size > auto-aof-rewrite-min-size 64mb が書き換えを開始するか


この画像はインターネットからのものです

Redis 永続化のフルバージョン


##3-11 AOF ワークフローとリライト フロー = プロセス


Redis 永続化のフルバージョン

Redis 永続化のフルバージョン##


4. 概要


以上が Redis 永続化の内容のすべてです。

以上がRedis 永続化のフルバージョンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。