根据字符串字段对redis hash maps进行排序
Sort redis hash maps based on string field
我正在尝试为我的 AWS redis 集群实现查询功能。我已将所有数据存储为哈希映射,还为每个索引字段创建了 SortedSet。
每当收到查询时,我们都会查询 SortedSet 以查找 ID。查询也可能涉及多个索引,这些索引根据 AND/OR 条件合并。一旦我们有了最终的一组 id,我们需要根据一些字段对数据进行排序。所以基本上我正在获取与 ids 匹配的 hashmaps 列表。哈希图如下所示
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"
我假设这是因为 hasmap 存储为字节数据,但无论如何我可以按字母顺序对它们进行排序吗?
我也尝试过使用排序函数提供的 alpha 参数,但它似乎不起作用
SORT collection by name desc ALPHA
您的用法似乎不正确。
像这样设置你的散列(就像你正在做的那样)
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"
我正在尝试为我的 AWS redis 集群实现查询功能。我已将所有数据存储为哈希映射,还为每个索引字段创建了 SortedSet。
每当收到查询时,我们都会查询 SortedSet 以查找 ID。查询也可能涉及多个索引,这些索引根据 AND/OR 条件合并。一旦我们有了最终的一组 id,我们需要根据一些字段对数据进行排序。所以基本上我正在获取与 ids 匹配的 hashmaps 列表。哈希图如下所示
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"
我假设这是因为 hasmap 存储为字节数据,但无论如何我可以按字母顺序对它们进行排序吗?
我也尝试过使用排序函数提供的 alpha 参数,但它似乎不起作用
SORT collection by name desc ALPHA
您的用法似乎不正确。 像这样设置你的散列(就像你正在做的那样)
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"