1

我正在尝试为我的 AWS redis 集群实现查询功能。我已将所有数据存储为哈希图,并为每个索引字段创建了 SortedSet。

每当收到查询时,我们都会查询 SortedSet 以查找 id。查询也可能涉及多个索引,这些索引基于 AND/OR 条件进行合并。一旦我们有了最终的 id 集,我们就需要根据一些字段对数据进行排序。所以基本上我正在获取与 id 匹配的哈希图列表。哈希图如下所示

HSET employees::1 name Arivu salary 100000 age 30
HSET employees::2 name Uma salary 300000 age 31
HSET employees::3 name Jane salary 100000 age 25
HSET employees::4 name Zakir salary 150000 age 28

现在我将所有哈希添加到一个集合中,以便我可以使用排序函数

SADD collection employees::1 employees::2 employees::3 employees::4

现在,当我尝试根据字符串字段进行排序时,排序似乎不起作用

127.0.0.1:6379> SORT collection by name
1) "employees::2"
2) "employees::4"
3) "employees::3"
4) "employees::1"
127.0.0.1:6379> SORT collection by name desc
1) "employees::2"
2) "employees::4"
3) "employees::3"
4) "employees::1"

我认为这是因为 hasmaps 存储为字节数据,但无论如何我可以按字母顺序对它们进行排序吗?

我也尝试过使用排序功能提供的 alpha 参数,但它似乎不起作用

SORT collection by name desc ALPHA
4

1 回答 1

1

您的用法似乎不正确。像这样设置你的哈希(就像你正在做的那样)

HSET employees::1 name Arivu salary 100000 age 30
HSET employees::2 name Uma salary 300000 age 31
HSET employees::3 name Jane salary 100000 age 25
HSET employees::4 name Zakir salary 150000 age 28

将您的 id 存储在集合中,如下所示:

SADD collection 1 2 3 4

请注意,在集合中我只存储员工的 ID (1,2,3,4)。

现在是时候排序了

SORT collection by employees::*->name ALPHA

它会像你预期的那样排序

1) "1"
2) "3"
3) "2"
4) "4"

如果您需要字段,请执行以下操作:

SORT collection by employees::*->name ALPHA GET employees::*->name

1) "Arivu"
2) "Jane"
3) "Uma"
4) "Zakir"  

如果您还需要年龄和姓名:

SORT collection by employees::*->name ALPHA GET employees::*->name GET employees::*->age
1) "Arivu"
2) "30"
3) "Jane"
4) "25"
5) "Uma"
6) "31"
7) "Zakir"
8) "28"
于 2021-07-21T12:03:27.230 回答