例如,在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)
实际上我期望*
通配符应该是存储在所谓的排序集中的标识符之一,但似乎它不会对排序集中的每个具体标识符执行替换。
我是否正在尝试以正确的方式解决问题,还是有另一种解决方法?
答案 0 :(得分:2)
基本上,你是对的,但SORT
命令的当前实现只接受散列引用左侧的通配符(参见lookupKeyByPattern
中的sort.c
)。这就是它的方式,而不是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"
答案 1 :(得分:1)
我发现它是Redis目前尚未涵盖的用例。
无论如何,还有另一种方法:排序集和hmget
的组合。
如果我将标识符存储在已排序的集合中,并且我使用zrange
的排名范围获取标识符,则很容易从使用hmget
的散列获取分页结果给出多个哈希值密钥。强>