2016-06-01 4 views
1

ソートされたセットでスコア付きリストを並べ替える必要があります。私はまた、制限コマンドを使用したい。並べ替えられたセット内のスコアを持つリストを並べ替える方法

以下のようなリストとソートセットを作成しました。

zadd weights 10 apple 20 grape 30 banana 40 strawberry 50 melon 
lpush list apple melon strawberry banana 

私はソートコマンドを考えて、以下のように試しました。

sort list by weights limit 2 2 
sort list by weights->* limit 2 2 

私はそのリストには、「リンゴ、バナナ、イチゴ、メロン」順序に並べ替えられていたし、唯一の「イチゴメロンは」limitコマンドによって返されると予想。 しかし、上記の両方のコマンドは機能しません。 (代わりに、アルファベット順にソートされたものがあります)

私はどのようにして結果を得ることができますか?

ありがとうございました。

答えて

0

このようにRedisは機能しません。ドキュメントによると、並べ替えは、外部キーによる値ではなく外部キーによるソートに機能します。より正確には、Redisがsort list by weights_*を実行すると、このパターンをマスキングするすべてのキーがチェックされ、リスト内の値と比較され、ソートされた結果が返されます。

例:あなたはソートしようとするとソートがweight_ *パターンに外部キーに適用されますあなたが見ることができるように今

lpush list apple melon strawberry banana 
MSET weights_apple 10 weights_grape 20 weights_banana 30 weights_strawberry 40 weights_melon 50 

、結果は

127.0.0.1:6379> sort list by weight_* 
1) "apple" 
2) "banana" 
3) "strawberry" 
4) "melon" 

になります。単一のエンティティ(ハッシュまたはソートされたセット)内ではありません

ハッシュマップまたはソート済みセットで同じことができますが、特定のパターンに一致するキーとそのキー内の値で比較が行われます。 たとえば、ハッシュマップまたはソートされたセットで同じ結果を得るには、このような処理が必要です。

127.0.0.1:6379> lpush list apple melon strawberry banana 
(integer) 4 
127.0.0.1:6379> hset weight_apple value 10 
(integer) 1 
127.0.0.1:6379> hset weight_grape value 20 
(integer) 1 
127.0.0.1:6379> hset weight_banana value 30 
(integer) 1 
127.0.0.1:6379> hset weight_strawberry value 40 
(integer) 1 
127.0.0.1:6379> hset weight_melon value 50 
(integer) 1 
127.0.0.1:6379> sort list by weights_*->weight 
1) "apple" 
2) "banana" 
3) "melon" 
4) "strawberry" 

あなたは、単一のハッシュとゲーマーのIDを含むセット内のすべての情報のゲーマーのを保存するようなデータ構造を持っている場合、これはうまく動作します。今度はスコアでソートしたいと思っています。

getコマンドを使用して、関連する他の値を取得することもできます。

関連する問題