2011-04-25 47 views
5

假设我有一些消息存储在哈希中。我有不同的散列(每个哈希代表一个新闻):Redis:我怎样才能按键排序我的散列?

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

我想检索所有的按键键命令那样:

KEYS news:* 

密钥是没有排序的问题:

news:3 
news:1 
news:2 

我想找回正确的顺序键列表。我不确定散列是我需要的结构。但是,根据redis documentation

Redis的哈希是字符串字段和字符串值之间的映射,所以他们是完美的数据类型来表示的对象(例如用户拥有一批像姓名,年龄字段,等等):

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

有什么建议吗?

+0

如果你想要的键排序,你确定它是一个哈希,而不是你想要的列表? – Theo 2011-04-25 17:45:22

+0

@Theo,这是我的问题的一部分。见下面;) – 2011-04-25 17:51:27

回答

5

将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

+0

是否有可能检测何时将密钥添加到我的字典中,然后将此密钥添加到我的排序列表中?如果没有这个功能,我怎么能确定我的排序列表在任何时候都包含我的散列表中的完整键?谢谢。 – 2011-04-25 17:10:07

+0

Redis确实支持pub/sub语义。因此,您可以在multi/exec块中添加一条发布消息:xxx key(例如,以“news:channel”为例)。请参阅http://redis.io/topics/pubsub。不要问Redis的谷歌集团,因为完成这项任务可能效率更高。 – alphazero 2011-04-25 22:15:55

+0

谢谢@alphazero! – 2011-04-26 06:54:37

2

你可以做什么是存储存在的新闻项目的集合或列表。例如,当你创建一个新的新闻项目时,让我们说新闻:4,你可以将索引4添加到一个集合,比如说新闻,现在它会有[1,2,3,4]。

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

排序列表:获取新闻* - > some_value_a - > * - > some_value_b

这是否有意义?希望它可以帮助

0

也许你可以试试HSCAN,它可以得到一个二维数组喜欢
[[key3, value3], [key1, value1], [key2, value2]]
其排序键的插入顺序。 但它只能从Redis 2.8.0