2012-01-05 9 views
10

セミコロンを使用してデータを保存しました。ワイルドカードを使用したキーの検索

redis> keys party:* 

1) "party:congress:president" 
2) "party:bjp:president" 
3) "party:bjp" 
4) "party:sena" 

すべての当事者をリストするコマンドはありますか?上記の例の場合、私は期待しています

congress 
bjp 
sena 
+1

ので、呼び出し続けますそのための別のリストを維持してください。それは部分キーで検索することが可能な高価な –

答えて

18

いいえ、それを行うコマンドはありません。 しかし、実際にする必要がある場合は、クライアント側で実装するのは簡単です。

アプリケーションでは、KEYSコマンドを使用してデータを取得しないでください。 KEYSは、保存した何百万ものキーを線形にスキャンしながら、Redisインスタンス全体をブロックします。これは、管理ツールで使用されるはずのデバッグコマンドです。 Redisので

あなたはキーが既存のコレクションに格納されている場合を除いて、鍵を照会することはできませんので、何のbtree構造は、キーが(セット、ZSET、等...)、インデックスには存在しない

+0

です。[この回答](http://stackoverflow.com/a/30490869/1041046)で見ました。私は赤目について学んでいるだけなので、正確さは分かりません。私はあなたの答えを更新して詳細を追加する必要があるかもしれないと思う。 – AaA

+0

部分キーで検索することは可能ですが、データ構造を明示的に作成する場合を除いて、部分キーで効率的に検索することはできません。さらに、元の質問は検索に関するものではなく、結果の操作に関するものです(これはクライアント側でうまくいきます)。 –

+0

良い点、私はキーの部分検索を探していましたが、これはGoogleの2番目の結果でした。 – AaA

1

私は思いますあなたがレディスから「パーティー」データを取得したい場合は、通常のデータを保存するたびにパーティー名をパーティーリストに保存してから簡単に取得できます。

4

SCANコマンドは、データベース全体をブロックせずにキーを検索します。

redis SCAN docs

このコマンドは、ずっとKEYSコマンドのフィルタのように動作し、オプションMATCHフィルタを持っています。

redis> SCAN 0 MATCH party:* 

1) <the cursor> 
2) 1) "party:congress:president" 
    2) "party:bjp:president" 
    3) "party:bjp" 
    4) "party:sena" 

は、カーソルはすべての当事者 (あなたがスキャンしている間、彼らが挿入されている場合はすべての当事者を取得しない場合があります)

利用可能

を取得するために0に戻るまで、あなたが持っている2.8

関連する問題