Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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

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 使用SORT命令从Redis中的排序集获取散列字段_Sorting_Redis_Hashmap_Sortedset - Fatal编程技术网

Sorting 使用SORT命令从Redis中的排序集获取散列字段

Sorting 使用SORT命令从Redis中的排序集获取散列字段,sorting,redis,hashmap,sortedset,Sorting,Redis,Hashmap,Sortedset,例如,在redis cli中,我尝试创建一个排序集,如下所示: zadd sortedset 1 1 2 2 3 3 hset data 1 hello hset data 2 goodbye hset data 3 sir 我创建了一个如下的散列: zadd sortedset 1 1 2 2 3 3 hset data 1 hello hset data 2 goodbye hset data 3 sir 我的目标是将标识符存储在已排序的集合中,并获取存储在datahash中的字

例如,在
redis cli
中,我尝试创建一个排序集,如下所示:

zadd sortedset 1 1 2 2 3 3
hset data 1 hello 
hset data 2 goodbye
hset data 3 sir
我创建了一个如下的散列:

zadd sortedset 1 1 2 2 3 3
hset data 1 hello 
hset data 2 goodbye
hset data 3 sir
我的目标是将标识符存储在已排序的集合中,并获取存储在
data
hash中的字符串,该哈希按已排序的集合顺序排序

这就是我迄今为止所尝试的:

sort sortedset by nosort get data->*
…其输出:

1) (nil)
2) (nil)
3) (nil)
实际上,我希望
*
通配符应该是存储在所谓的排序集中的标识符之一,但它似乎没有对排序集中的每个具体标识符执行替换


我是想用正确的方法来解决这个问题,还是有其他方法来解决这个问题?

基本上,您是对的,但是
SORT
命令的当前实现只接受散列解引用左侧的通配符(请参见
SORT.c
中的
lookupKeyByPattern
)。这就是atm的方式,而不是使用Lua脚本进行排序。例如,这里有一个肮脏的快速:

$ redis-cli eval "return redis.call('HMGET', KEYS[2], unpack(redis.call('ZRANGEBYSCORE', KEYS[1], '-inf', '+inf')))" 2 sortedset data
1) "hello"
2) "goodbye"
3) "sir"

我发现这是一个Redis目前还没有涉及到的用例

无论如何,还有另一种方法:组合排序集和
hmget


如果我将标识符存储在一个排序集中,我使用带有
zrange
的秩范围来获取它们,那么使用
hmget
给出多个哈希键,就很容易从哈希中获取分页结果。

最后,我将排序集给出的分页ID赋予
hmget
,以获得多个哈希键,也许Lua在某些情况下是一种过度杀伤力。在我的例子中,我使用的是C#和StackExchange.Redis,但您的方法很好!好的解决方案-它的好处是以多个调用的代价减少RAM的消耗。Lua overkillingness vs.SORT-我不确定您是否会看到性能上的重大差异,即使后者按照您的预期实现。SORT可以说是Redis命令中最复杂的一个:)不管怎样,这个伟大的问题让我从**s中探出头来,阅读源代码并报告一个问题():)