11

ソートされたセットを使用して redis から複数のキーの値を取得するにはどうすればよいですか?

zadd Users 0 David
zadd Users 5 John
zadd Users 15 Linda
zrevrange Users 0 -1 withscores

これには 2 人のユーザーが含まれます。

キー 'David' と 'Linda' を持つユーザーを 1 つのクエリで取得するにはどうすればよいですか?

4

4 に答える 4

21

Redis MGET を使用できます

redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)

詳細はこちら http://redis.io/commands/mget

于 2014-11-14T13:38:20.353 に答える
11

Redis に新しいコマンドを導入せずにそれを行う方法は複数あります。

たとえば、一時セットに興味のある名前を入力してから、一時セットと zset の共通部分を計算できます。

multi
  sadd tmp David Linda ... and more ...
  zinterstore res 2 tmp Users weights 0 1
  zrange res 0 -1 withscores
  del tmp res
exec

パイプラインを使用すると、これは 1 回のラウンドトリップのみを生成し、tmp に任意の数の入力パラメーターを入力できます。

Redis 2.6 では、これらの行をサーバー側の Lua スクリプトにラップして、入力リストを受け取り、必要な結果を返すコマンドを最終的に取得することもできます。

eval "redis.call( 'sadd', 'tmp', unpack(KEYS) );
      redis.call( 'zinterstore', 'res', 2, 'tmp', 'Users', 'weights', 0, 1 );
      local res = redis.call( 'zrange', 'res', 0, -1, 'withscores' );
      redis.call( 'del', 'res', 'tmp' ) ; 
      return res
     " 2 David Linda

スクリプトを使用して簡単に実装できる場合、Redis に新しいコマンドが追加されることはないと想定しても問題ありません。

于 2012-05-30T13:30:14.947 に答える
1

並べ替えられたアイテムを処理するために、並べ替えられたセットを使用します。あなたが求めているのは、ソート済みセットをソート済みセットとして使用しないことです。並べ替え順序を気にしない場合は、並べ替えられたセットは探しているものではない可能性があります。すでに複数のキーを取得できますが、任意のキーは取得できません。

主な目的が複数の任意のキーを取得することである場合は、ハッシュと hmget を使用します。ソートされたセットにアクセスすることが主な必要性である場合は、ソートされたセットを使用して、スクリプト ルートを使用するか、一連の zscore 呼び出しをパイプライン処理します。

于 2012-05-31T05:09:38.510 に答える
0

これは 1 つのコマンドでは取得できません。1回の応答でそれを取得するためにできる最も近いもの:

MULTI
ZSCORE Users David
ZSCORE Users Linda
EXEC

EDIT : または、ユーザーのスコアで並列ハッシュを維持し、それをクエリすることもできます

HMGET UserScores David Linda
于 2012-05-30T11:00:28.450 に答える