RedisのはKEYSコマンドを台無しにしない、または殴られます
Redisのは、より多くのシーンになりましたでしょうか?どのように一括削除キーはありますか?
一部の人々はと言うKEYS
だけで学ぶために始めて、コマンドのRedisの時間を、このコマンドリストライブラリキーを使用することです。
KEYSは注意して使用するコマンド。
なぜ?客観ない心配、ステップバイステップで見てみましょう。
KEYSコマンド
警告:のみ細心の注意を払って、本番環境で使用されるべきコマンドとしてKEYSを考えます。それは大規模なデータベースに対して実行されたときには、パフォーマンスを台無しにすることがあります。このコマンドは、デバッグや、あなたの鍵空間のレイアウトの変更などの特別な操作のために意図されます。定期的なアプリケーションコードのキーを使用しないでください。あなたの鍵空間のサブセットで鍵を見つけるための方法を探している場合は、セットを使用することを検討してください。
上記の文は、公式文書であるKEYS
数が多すぎる、効率が非常に低い場合、コマンドは、この時点で、本番環境で使用することはできません。同時に、通常のキーを使用していないコレクション型と直接公式提案を一致させます。
一部の人々は言う KEYS
同等のリレーショナルデータリポジトリ select *
本番環境では、ほとんど無効にすることです。
KEYS
データベースのパフォーマンスのコマンドやデータよりゆっくりと増加に伴いKEYS
コマンドは、障害物、連続原因となりますKEYS
Redisのを阻止するためのコマンドを十分に
場合を想像Redis
シーンのクラスタがある場合は、10秒以上をブロックされたクラスタ決意をもたらすことができるが、Redis
失敗し、フェイルオーバーしています。
より深刻なケースでは雪崩の応用につながることができます。
しかし、オンラインの多くがそのように書かれている redis-cli --raw keys "key前缀*" | xargs redis-cli del
、憶測によると、生産環境で実験を行うために取得することはありません。
ところで、ユニバーサルの下でxargs
Linuxの下のコマンドであるコマンド、。
xargsのコマンドを他のコマンドのフィルタパラメータだけでなく、工具の複数のコマンドの組み合わせに渡されます。これは、標準のコマンドラインパラメータ、xargsのまたはコマンド特定のコマンドのパラメータにそれを処理し、変換することができるSTDINパイプに変換入力データが優れています。xargsのは、複数行を1行、単一行の増加となるような他のフォーマットへの単一または複数行のテキスト入力してもよいです。デフォルトのコマンドxargsのエコー、スペースでデフォルトの区切り文字です。改行とのギャップが含まれていますxargsのの入力にパイプが、xargsのプロセスによるこの手段は、ラップや空白に置き換えられます。xargsが1行のコマンドを構築するための重要な要素の一つです。
SCANコマンド
2.8バージョンからのRedisは、スキャンコマンドをサポートするために始めた、次のように、基本的な使い方SCANコマンドは次のとおりです。
-
複雑さはO(N)であるが、カーソルを介してステップバイステップは、スレッドをブロックしないであろう。
-
限定パラメータCOUNT;
-
キーコマンドを使用して、パターンマッチングは、同じ機能を提供します。
-
サーバーカーソルは状態、クライアントカーソル整数にカーソルバックをスキャンのみ状態を保存する必要はありません。
スキャンの使用
SCAN cursor [MATCH pattern] [COUNT count]
- スキャンコマンドは、第二、第3のスロットを介して定期的に、単一のパスに一致する、最初のカーソルである、3つのパラメータを提供します
- 最初のトラバーサルは、0のカーソル値であり、その後、次のトラバースカーソル最初の整数として結果を返し、0の値は終了を表す場合、最終的に、カーソルに戻します。
127.0.0.1:6379> scan 0 MATCH tony*
1) "42"
2) 1) "tony25"
2) "tony2519"
3) "tony2529"
4) "tony2510"
5) "tony2523"
6) "tony255"
7) "tony2514"
8) "tony256"
9) "tony2511"
10) "tony15"
127.0.0.1:6379> scan 42 MATCH tony* COUNT 1000
1) "0"
2) 1) "tony3513"
2) "tony359"
3) "tony4521"
4) "tony356"
5) "tony30"
6) "tony320"
7) "tony3"
8) "tony312"
バックは、現在の反復の)代表的な結果セット、上記のコードのように2つの部分に分割1)カーソルの最初の反復を表し、2
完了の代わりにマッチの場合は、すべてのことが0注に、カーソル戻ります。
一括削除スキャンコマンド
ためKEYSのオーダO(N)との時間複雑SCANコマンドは、トラバーサル操作m回に分解し、それぞれの時間は、時間計算量はO(1)であるように、実行します。また、Redisのサーバーの閉塞にデータリードを大量に横断するコマンドキーを使用して解きます。私は、次のコマンドバルク削除を使用することをお勧めします:
redis-cli --scan --pattern "key前缀*" | xargs -L 1000 redis-cli del
概要
のでRedisのスレッドですが、KEYS
いくつかのケースではブロックされます。本当の弟の生産と本当にケースがありKEYSサービスのダウンタイムが生じが、。経済的損失が生じ、非常に深刻な影響は、言うことはありません。
深刻な原因雪崩プログラムは、で削除したときに覚えているSCAN
すべて覚えておく必要がありますこの記事を読んで、コマンド。
これは、Redisの開発を推奨しました
1、データ分離
Redisのにには何も入れないでください、比較的高いデータ・メモリのオーバーヘッドが非常に高価であり、いくつかのQPSを置くハードディスクストレージを検討してみてください。
2、サブビジネス
障害が他のインスタンスに影響を与えない別のアクセス便利な時間のように別々の放電の例として、。
3、圧縮
Redisのは、圧縮されたバイナリストレージの大きな価値単一キーの推奨事項があります。
4、故障時間
Redisのは、キーの有効期限を設定し、あなたが設定されていない場合は、メモリによって占有されていたであろう、とキーの有効期限の時間は、ビジネスシーンに応じて設定する必要があります。
5、容量
あまりにも多くのメモリ10-20Gを取ってはいけない、千万以内に制御された数のキーが続きます。
図6に示すように、モニタリング
操作とデータを監視し、合理的な良いのメンテナンスは、Redisのセキュリティ脆弱性の保護と災害復旧を行います。
Redisのは、より多くのシーンになりましたでしょうか?どのように一括削除キーはありますか?
一部の人々はと言うKEYS
だけで学ぶために始めて、コマンドのRedisの時間を、このコマンドリストライブラリキーを使用することです。
KEYSは注意して使用するコマンド。
なぜ?客観ない心配、ステップバイステップで見てみましょう。
KEYSコマンド
警告:のみ細心の注意を払って、本番環境で使用されるべきコマンドとしてKEYSを考えます。それは大規模なデータベースに対して実行されたときには、パフォーマンスを台無しにすることがあります。このコマンドは、デバッグや、あなたの鍵空間のレイアウトの変更などの特別な操作のために意図されます。定期的なアプリケーションコードのキーを使用しないでください。あなたの鍵空間のサブセットで鍵を見つけるための方法を探している場合は、セットを使用することを検討してください。
上記の文は、公式文書であるKEYS
数が多すぎる、効率が非常に低い場合、コマンドは、この時点で、本番環境で使用することはできません。同時に、通常のキーを使用していないコレクション型と直接公式提案を一致させます。
一部の人々は言う KEYS
同等のリレーショナルデータリポジトリ select *
本番環境では、ほとんど無効にすることです。
KEYS
データベースのパフォーマンスのコマンドやデータよりゆっくりと増加に伴いKEYS
コマンドは、障害物、連続原因となりますKEYS
Redisのを阻止するためのコマンドを十分に
場合を想像Redis
シーンのクラスタがある場合は、10秒以上をブロックされたクラスタ決意をもたらすことができるが、Redis
失敗し、フェイルオーバーしています。
より深刻なケースでは雪崩の応用につながることができます。
しかし、オンラインの多くがそのように書かれている redis-cli --raw keys "key前缀*" | xargs redis-cli del
、憶測によると、生産環境で実験を行うために取得することはありません。
ところで、ユニバーサルの下でxargs
Linuxの下のコマンドであるコマンド、。
xargsのコマンドを他のコマンドのフィルタパラメータだけでなく、工具の複数のコマンドの組み合わせに渡されます。これは、標準のコマンドラインパラメータ、xargsのまたはコマンド特定のコマンドのパラメータにそれを処理し、変換することができるSTDINパイプに変換入力データが優れています。xargsのは、複数行を1行、単一行の増加となるような他のフォーマットへの単一または複数行のテキスト入力してもよいです。デフォルトのコマンドxargsのエコー、スペースでデフォルトの区切り文字です。改行とのギャップが含まれていますxargsのの入力にパイプが、xargsのプロセスによるこの手段は、ラップや空白に置き換えられます。xargsが1行のコマンドを構築するための重要な要素の一つです。
SCANコマンド
2.8バージョンからのRedisは、スキャンコマンドをサポートするために始めた、次のように、基本的な使い方SCANコマンドは次のとおりです。
-
複雑さはO(N)であるが、カーソルを介してステップバイステップは、スレッドをブロックしないであろう。
-
限定パラメータCOUNT;
-
キーコマンドを使用して、パターンマッチングは、同じ機能を提供します。
-
サーバーカーソルは状態、クライアントカーソル整数にカーソルバックをスキャンのみ状態を保存する必要はありません。
スキャンの使用
SCAN cursor [MATCH pattern] [COUNT count]
- スキャンコマンドは、第二、第3のスロットを介して定期的に、単一のパスに一致する、最初のカーソルである、3つのパラメータを提供します
- 最初のトラバーサルは、0のカーソル値であり、その後、次のトラバースカーソル最初の整数として結果を返し、0の値は終了を表す場合、最終的に、カーソルに戻します。
127.0.0.1:6379> scan 0 MATCH tony*
1) "42"
2) 1) "tony25"
2) "tony2519"
3) "tony2529"
4) "tony2510"
5) "tony2523"
6) "tony255"
7) "tony2514"
8) "tony256"
9) "tony2511"
10) "tony15"
127.0.0.1:6379> scan 42 MATCH tony* COUNT 1000
1) "0"
2) 1) "tony3513"
2) "tony359"
3) "tony4521"
4) "tony356"
5) "tony30"
6) "tony320"
7) "tony3"
8) "tony312"
バックは、現在の反復の)代表的な結果セット、上記のコードのように2つの部分に分割1)カーソルの最初の反復を表し、2
完了の代わりにマッチの場合は、すべてのことが0注に、カーソル戻ります。
一括削除スキャンコマンド
ためKEYSのオーダO(N)との時間複雑SCANコマンドは、トラバーサル操作m回に分解し、それぞれの時間は、時間計算量はO(1)であるように、実行します。また、Redisのサーバーの閉塞にデータリードを大量に横断するコマンドキーを使用して解きます。私は、次のコマンドバルク削除を使用することをお勧めします:
redis-cli --scan --pattern "key前缀*" | xargs -L 1000 redis-cli del
概要
のでRedisのスレッドですが、KEYS
いくつかのケースではブロックされます。本当の弟の生産と本当にケースがありKEYSサービスのダウンタイムが生じが、。経済的損失が生じ、非常に深刻な影響は、言うことはありません。
深刻な原因雪崩プログラムは、で削除したときに覚えているSCAN
すべて覚えておく必要がありますこの記事を読んで、コマンド。
これは、Redisの開発を推奨しました
1、データ分離
Redisのにには何も入れないでください、比較的高いデータ・メモリのオーバーヘッドが非常に高価であり、いくつかのQPSを置くハードディスクストレージを検討してみてください。
2、サブビジネス
障害が他のインスタンスに影響を与えない別のアクセス便利な時間のように別々の放電の例として、。
3、圧縮
Redisのは、圧縮されたバイナリストレージの大きな価値単一キーの推奨事項があります。
4、故障時間
Redisのは、キーの有効期限を設定し、あなたが設定されていない場合は、メモリによって占有されていたであろう、とキーの有効期限の時間は、ビジネスシーンに応じて設定する必要があります。
5、容量
あまりにも多くのメモリ10-20Gを取ってはいけない、千万以内に制御された数のキーが続きます。
図6に示すように、モニタリング
操作とデータを監視し、合理的な良いのメンテナンスは、Redisのセキュリティ脆弱性の保護と災害復旧を行います。