2016-04-28 4 views
0

私は数百万のキーを持つredisデータベースを持っています。場合によってはパターンでキーを照会する必要があります。私がscanを使用している2016-04-28:*。最初の呼び出しは、redis scanは空の結果を返しますが、ゼロ以外のカーソルを返します

scan 0 match 2016-04-28:* 

でなければなりません。検索が完了すると、それは一連のキーと次のカーソルまたは0を返します。

しかし、クエリを実行して一致するキーがない場合、scanはまだゼロ以外のカーソルを返しますが、空のキーセットを返します。これは、連続したすべてのクエリに起こり続けるので、検索は本当に長い間終了していないようです。

Redisのドキュメントは

SCAN家族の機能は、呼び出しごとに返された要素の数が一定の範囲内にあることを保証するものではありませんと言います。 コマンドはゼロ要素も返すことができます。クライアントは、返されたカーソルがゼロでない限り、繰り返しの完了を考慮しないでください。

だから私は空のセットを取得することができません。

私は物事をスピードアップできる方法はありますか?

答えて

7

一致がないことを確認するには、スキャンを完了する必要があります(つまり、カーソルを取得する== 0)。ただし、反復回数を減らすにはCOUNT optionを使用できます。デフォルトの値は10です。これが一致パターンの一般的なシナリオである場合、空白の返信ごとにそれを増やし始めます(たとえば、倍数または2のべき乗ですが、大文字と小文字の場合は上限を入れます)。キー。そうすることで、ネットワークの往復を節約できるので、「スピードアップ」する必要があります。

関連する問題