ソートされたセットを使用して redis から複数のキーの値を取得するにはどうすればよいですか?
zadd Users 0 David
zadd Users 5 John
zadd Users 15 Linda
zrevrange Users 0 -1 withscores
これには 2 人のユーザーが含まれます。
キー 'David' と 'Linda' を持つユーザーを 1 つのクエリで取得するにはどうすればよいですか?
ソートされたセットを使用して redis から複数のキーの値を取得するにはどうすればよいですか?
zadd Users 0 David
zadd Users 5 John
zadd Users 15 Linda
zrevrange Users 0 -1 withscores
これには 2 人のユーザーが含まれます。
キー 'David' と 'Linda' を持つユーザーを 1 つのクエリで取得するにはどうすればよいですか?
Redis MGET を使用できます
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
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 に新しいコマンドが追加されることはないと想定しても問題ありません。
並べ替えられたアイテムを処理するために、並べ替えられたセットを使用します。あなたが求めているのは、ソート済みセットをソート済みセットとして使用しないことです。並べ替え順序を気にしない場合は、並べ替えられたセットは探しているものではない可能性があります。すでに複数のキーを取得できますが、任意のキーは取得できません。
主な目的が複数の任意のキーを取得することである場合は、ハッシュと hmget を使用します。ソートされたセットにアクセスすることが主な必要性である場合は、ソートされたセットを使用して、スクリプト ルートを使用するか、一連の zscore 呼び出しをパイプライン処理します。
これは 1 つのコマンドでは取得できません。1回の応答でそれを取得するためにできる最も近いもの:
MULTI
ZSCORE Users David
ZSCORE Users Linda
EXEC
EDIT : または、ユーザーのスコアで並列ハッシュを維持し、それをクエリすることもできます
HMGET UserScores David Linda