【问题标题】:Sort redis hash maps based on string field根据字符串字段对 redis 哈希图进行排序
【发布时间】:2021-09-28 12:36:07
【问题描述】:

我正在尝试为我的 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

【问题讨论】:

    标签: amazon-web-services redis stackexchange.redis elastic-cache


    【解决方案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"
    

    【讨论】:

    • 感谢您纠正西里尔。是否也可以根据多个字段进行排序?
    • 根据 redis 文档中的定义 (redis.io/commands/SORT) SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination] 你可以只有一个 [BY pattern]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2016-11-18
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    相关资源
    最近更新 更多