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中探出头来,阅读源代码并报告一个问题():)