ディレクトリ
1、キーのキーコマンドの欠点
2、導入スキャンコマンド
3、スキャンの使用
- ユーザカーソル整数カーソルが0に設定され、それは新たな反復の開始を示します
- 正規表現パターン
- カウント制限
- デフォルト10
- 制限が返される結果の数を限定するものではないが、スロットの限られた数のサーバを介して単一のパスを辞書ことに留意されたいです)
- 必ずしもすべての反復が同じCOUNT値を使用する必要があります注意してください。ユーザーが自由にちょうど最後の繰り返しのカーソルが内部で使用される次の反復を返さ覚えて、各反復でCOUNT値を変更し、そのニーズに応じてすることができます
- 間違ったカーソルを使用しました。使用すると、インクリメンタル反復を実行するとクラッシュするサーバーが発生することはありませんが、それはコマンドが未定義の動作を生成させることの範囲または他の非正常なカーソルのうち、負、(壊れた)中断しました。
- 2つだけカーソルの有効な値:
- 新しい反復の開始時に、カーソルが0でなければなりません。
- 反復コマンドの繰り返しは、使用する前に、カーソルの値を返します。
- カーソルの次の反復
- この繰り返しの結果セット(空であってもよいです)
4、スキャン指示インスタンス:
$ redis-cli scan 0 match key99* count 1000
1) "13912"
2) 1) "key997"
2) "key9906"
3) "key9957"
4) "key9902"
5) "key9971"
6) "key9935"
7) "key9958"
8) "key9928"
9) "key9931"
10) "key9961"
11) "key9948"
12) "key9965"
13) "key9937"
$ redis-cli scan 13912 match key99* count 1000
1) "5292"
2) 1) "key996"
2) "key9960"
3) "key9973"
4) "key9978"
5) "key9927"
6) "key995"
7) "key9992"
从上面的过程可以看到虽然设置的limit是1000,但是返回的结果只有 10 个左右。这是因为因为这个 limit 不是限定返回结果的数量,而是限定服务器单次遍历的字典槽位数量(约等于)。所以如果将limit 设置为 10,你会发现返回结果是空的,但是游标值不为零,意味着遍历还没结束。
如果将limit设置为10,例如下:
$ redis-cli scan 0 match key99* count 10
1) "15360"
2) (empty list or set)
$ redis-cli scan 15360 match key99* count 10
1) "2304"
2) (empty list or set)
4、より多くのスキャン指示
スキャン指示は、すべてのキーを通過するだけでなく、一連の命令ですが、また、指定されたコンテナを横断するように設定することができます。"
- 現在のデータベース内のデータベースキーの繰り返しのためのSCANコマンド、
- zscan ZSETトラバース要素のコレクション、
- HSCANトラバーサルキーハッシュ辞書右、
- コレクションを設定する要素をトラバースSSCAN。
注、SSCANコマンド、HSCANコマンドと最初のパラメータZSCANコマンドは常に鍵データベースです。SCANコマンドとは、最初の引数に任意のデータベースのキーを提供する必要はありません - それは現在のデータベース内のデータベース・キーのすべての反復であるため。
5、途中でストップ反復が可能
すべての状態の反復がどのような状態の保存反復せずに、サーバー内のカーソルに格納されるため、そのクライアントは、予告なしに、反復の途中でサーバーを停止することができます。任意の回数の反復が途中で停止した場合であっても、それは何の問題も発生しません。
図6に示すように、反復の終わり
カーソルがユーザに0 Redisのサーバ復帰である場合、これは反復の終了を決定する唯一の方法であり、反復が完了したことを示すが、結果セットが空の反復を終了するか否かが判断される返すことができません。
ときに、データ・セット・サイズ有界(有界)一方コマンドを使用インクリメンタル反復アルゴリズムのみが保証され、データセットのサイズを拡張するために継続された場合、反復は反復、その後、他の言葉で、停止します、インクリメンタル反復コマンドは、完全な反復を完了することができないことがあります。
7、時間の複雑さ
複雑性O(1)の各実行は、反復複雑さの完全なデータセットは、Nはデータセット内の要素の数であり、O(N)です。
8.参照文献
http://jinguoxing.github.io/redis/2018/09/04/redis-scan/
http://doc.redisfans.com/key/scan.html