Sorting 如何使用排序集中的分数对列表进行排序
我想对一个列表进行排序,在一个已排序的集合中包含分数。我还想使用limit命令 我创建了一个列表和一个排序集,如下所示Sorting 如何使用排序集中的分数对列表进行排序,sorting,redis,Sorting,Redis,我想对一个列表进行排序,在一个已排序的集合中包含分数。我还想使用limit命令 我创建了一个列表和一个排序集,如下所示 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 我想到了排序命令,并尝试如下
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
我想到了排序命令,并尝试如下
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命令只返回“草莓瓜”。
但上述两个命令都不起作用。(取而代之的是按字母顺序排列的)
我怎样才能得到我期望的结果
谢谢。Redis不是那样工作的。根据文档,按排序用于按外键排序,而不是按外键内的值排序。更准确地说,当Redis按权重对列表进行排序时,它会检查与此模式匹配的所有键,并将它们与列表中的值进行比较,然后返回排序结果 例如:
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"
正如您所看到的,排序应用于权重模式上的外部键。不在单个实体内(散列或排序集)
您可以对hashmap或sorted set执行相同的操作,但会对匹配特定模式的键进行比较,然后对该键中的值进行比较。
例如,要使用hashmap或排序集实现同样的效果,必须执行以下操作
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命令获取其他关联值