【问题标题】:Redis : How can I sort my hash by keys?Redis:如何按键对哈希进行排序?
【发布时间】:2011-08-12 10:17:49
【问题描述】:

假设我有一些新闻存储在哈希中。我有不同的哈希值(每个哈希值代表一个新闻):

news:1
news:2
news:3
...

我想用这样的 KEYS 命令检索所有键:

KEYS news:*

键未排序的问题:

news:3
news:1
news:2

我想以正确的顺序检索键列表。我不确定哈希是否是我需要的结构。但是,根据redis documentation

Redis 哈希是字符串字段和字符串值之间的映射,因此它们是表示对象的完美数据类型(例如具有姓名、姓氏、年龄等多个字段的用户):

将我的新闻对象存储在哈希中似乎是个好主意。

有什么建议吗?

【问题讨论】:

  • 如果你想要对键进行排序,你确定它是一个哈希而不是你想要的列表吗?
  • @Theo,这是我的问题的一部分。见下文;)

标签: redis


【解决方案1】:

将 Redis 哈希视为索引文档。

HSET news:1 title levy_breaks
HSET news:1 type breaking_news
HSET news:1 byline alphazero
HSET news:1 date 04:25:2011
HSET news:1 content <the story>

HSET news:2 ...
..

在上面,news:1 是“哈希键”,然后是“哈希字段”,最后是其关联值。

也就是说,您似乎只是想对“哈希键”进行排序。

使用MULTI/EXEC 构造来设置新闻项目的所有字段(有 n 个字段),最后还要添加哈希键——例如你的新闻项目——它是一个有序的集合。或者,您可以将它们添加到列表中,然后在该列表中使用SORT 命令。

The Redis docs.

【讨论】:

  • 是否可以检测到何时将键添加到我的字典中,然后将此键添加到我的排序列表中?如果没有该功能,我如何确保我的排序列表在任何时候都包含我的哈希中的完整键?谢谢。
  • Redis 确实支持 pub/sub 语义。因此,您可以在 multi/exec 块中添加一个发布 news:xxx 键(例如,到“news:channel”)。见redis.io/topics/pubsub。请询问 redis google 小组,因为完成此任务的效率可能要高得多。
【解决方案2】:

您可以做的是存储现有新闻项目的集合或列表。例如,当您创建一个新的新闻项目时,比如 news:4,您可以将索引 4 添加到一个集合中,比如 list:news,现在将有 [1, 2, 3, 4]

现在假设您的新闻哈希结构是日期,作者。有了这个,你可以执行以下操作:

sort list:news get *->some_value_a ->*->some_value_b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2011-10-30
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多