Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何使用排序集中的分数对列表进行排序_Sorting_Redis - Fatal编程技术网

Sorting 如何使用排序集中的分数对列表进行排序

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 我想到了排序命令,并尝试如下

我想对一个列表进行排序,在一个已排序的集合中包含分数。我还想使用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
我原以为列表已按“苹果香蕉草莓瓜”的顺序排序,而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命令获取其他关联值