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

Using SORT command to get HASH fields from a sorted set in Redis

例如,在 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)。这就是 atm 的方式,而不是 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 给出多个哈希很容易从哈希中获取分页结果键。