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