在Redis中使用SORT命令从排序集中获取HASH字段



例如,在redis-cli中,我试图创建一个这样的排序集:

zadd sortedset 1 1 2 2 3 3

我创建了一个像这样的散列:

hset data 1 hello 
hset data 2 goodbye
hset data 3 sir

我的目标是将标识符存储在排序集中,并获得按排序集排序的data哈希存储的字符串。

这是我到目前为止所尝试的:

sort sortedset by nosort get data->*

…输出:

1) (nil)
2) (nil)
3) (nil)

实际上我期望*通配符应该是存储在所谓的排序集中的标识符之一,但似乎它不执行对排序集中的每个具体标识符的替换。

我是在试图以正确的方式解决问题,还是有其他方法来解决这个问题?

基本上,您是对的,但是SORT命令的当前实现只接受散列解引用左侧的通配符(参见sort.c中的lookupKeyByPattern)。这就是它的方式,而不是SORT,使用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给出多个哈希键就很容易从哈希中获得分页结果。

相关内容

最新更新