使用SORT命令从Redis

时间:2015-05-21 09:38:28

标签: 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

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

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

sort sortedset by nosort get data->*

......输出:

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

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

我是否正在尝试以正确的方式解决问题,还是有另一种解决方法?

2 个答案:

答案 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的散列获取分页结果给出多个哈希值密钥。