9

課題で Redis の HSCAN コマンドを使用したいのですが、どのように機能するのかわかりません。このコマンドの Redis の公式ページ ( http://redis.io/commands/hscan ) では、空白のページが表示されます。

継続的な入力データを取得し、それらを Redis の複数のハッシュに瞬時に保存しています。後でそれらすべてを反復処理したいと考えています。

次のコマンドを使用してデータを保存しています

HMSET myhash ordertype "neworder" order_ts "1234" act_type "order_ack" ack_ts "1240"
HMSET myhash2 ordertype "neworder" order_ts "2234" act_type "order_ack" ack_ts "2240"

HSCAN の使用例を教えてください。

私の場合、次の出力を取得したいと思います
1) myhash
2) myhash2
3) myhash3

.
.
.

4

2 に答える 2

15

コマンド

以下を使用して完全なハッシュ スキャンを開始します。

HSCAN myhash 0

次のパターンに一致するフィールドでハッシュ スキャンを開始します。

HSCAN myhash 0 MATCH order_*

パターンに一致するフィールドを使用してハッシュ スキャンを開始し、スキャン コマンドにさらにスキャンを実行させるには、次のコマンドを使用します。

HSCAN myhash 0 MATCH order_* COUNT 1000

ノート

ドキュメントで説明されているように、 MATCHは反復ごとに要素をほとんどまたはまったく返さないことを忘れないでください。

MATCH フィルタは、要素がコレクションから取得された後、クライアントにデータを返す直前に適用されることに注意してください。これは、パターンがコレクション内のほとんどの要素と一致しない場合、SCAN はほとんどの反復で要素を返さない可能性が高いことを意味します。

COUNTそのため、反復ごとにより多くのスキャンを強制するためにを使用できます。

[更新] Didier Speziaが指定したように、*SCAN コマンドを使用するには Redis 2.8+ が必要です。

于 2013-11-12T10:44:45.827 に答える
9

あなたが述べたように。ハッシュキーの出力を取得する必要があります

myhash
myhash2
myhash3

HSCAN はこの目的のためのものではありません。HSCAN は、特定の HASH のフィールドをスキャンすることです。myhash または myhash2 のフィールドをスキャンできます。ただし、パターンに基づいてキーを見つけたい場合は、2 つのオプションがあります。

HASH キーを使用して SET を作成する

SADD hashkeys "myhash" "myhash1" "myhash2"

SMEMBERS hashkeys
    1) "myhash"
    2) "myhash2"
    3) "myhash1"

If you are using 2.8 I would recommend you use sscan instead of smembers

sscan hashkeys 0 match my*

スキャン コマンドのみを使用

scan 0 MATCH myhash* count 1000 

キー マッチングを使用します (redis サーバーをブロックするため、お勧めしません)。

keys myhash*

SMEMBERS、SSCAN、または KEYS を使用できるキーをフェッチするための長いストーリーカットソート。もちろん、redis 2.8を使用している場合はSSCANが最適です

于 2013-11-20T00:49:05.710 に答える