从给定的哈希集中获取哈希集

时间:2016-12-20 12:52:22

标签: redis

我使用以下键存储哈希集:measurement:<current_timestamp>,f.e。 measurement:1482236501103,然后稍后我想传递一个特定的时间戳,并从给定的时间戳到结束获取所有记录。但由于Redis没有订购记录,我能想出的唯一解决方案是检查每个密钥 - 其名称的时间戳是否比给定的更大。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

实际上,有一种更好的方式来提供这种类型的查询。

将测量值存储在分类集中 - 将时间戳保留在分数中,元素本身就是测量值。因为集合中的成员必须是唯一的,但我认为可以重复测量值,而不是将值作为前缀与时间戳一起存储,以使成员唯一。这意味着如果在时间123你测量了值987,你将使用以下命令将它存储在Redis中:

ZADD measurements 123 123:987

要执行查询,请使用ZRANGEBYSCORE并在客户端应用程序中处理回复,以从连接的时间戳:值成员中提取值。

答案 1 :(得分:0)

我做了类似@Itamar Haber建议的事情。我确实使用了Sorted Sets并将timestamp用作score,但由于我存储的值是字符串化的JSON对象,我只是将时间戳添加为对象中的另一个属性(使价值独特)。

另外,为了能够从给定的时间戳到最后一条记录获取所有记录,我添加了一个只保存时间戳的密钥"measurement:last"排序集中最后输入的记录。这样我就可以使用ZRANGEBYSCORE并将给定的时间戳记作为start,将最后一个时间戳记作为end