Redis 从给定的1开始获取哈希集
我使用以下键存储哈希集:Redis 从给定的1开始获取哈希集,redis,Redis,我使用以下键存储哈希集:度量:,f.e.度量:1482236501103,然后在稍后的时间点,我希望传递某个时间戳,并获取从给定时间戳到结束的所有记录。但是由于Redis不会对记录进行排序,所以我能想到的唯一解决方案是检查每个键——其名称中的时间戳是否比给定的时间戳“大” 有更好的方法吗?事实上,有更好的方法服务于这种类型的查询 将测量值存储在一个已排序的集合中-将时间戳保留在分数中,元素本身就是测量值。因为集合中的成员必须是唯一的,但我假设可以重复测量值,而不是按原样存储值,并在其前面加上时间
度量:
,f.e.度量:1482236501103
,然后在稍后的时间点,我希望传递某个时间戳,并获取从给定时间戳到结束的所有记录。但是由于Redis不会对记录进行排序,所以我能想到的唯一解决方案是检查每个键——其名称中的时间戳是否比给定的时间戳“大”
有更好的方法吗?事实上,有更好的方法服务于这种类型的查询 将测量值存储在一个已排序的集合中-将时间戳保留在分数中,元素本身就是测量值。因为集合中的成员必须是唯一的,但我假设可以重复测量值,而不是按原样存储值,并在其前面加上时间戳以使成员唯一。这意味着,如果在时间123测量值987,将使用以下命令将其存储在Redis中:
ZADD measurements 123 123:987
要执行查询,请使用并处理客户端应用程序中的回复,以从连接的时间戳:value成员中提取值。我做了类似于@Itamar Haber建议的操作。我确实使用了
排序集
,并将时间戳
用作分数
,但由于我存储的值是字符串化的JSON对象,我只是将时间戳作为另一个属性添加到对象中(以使值唯一)
此外,为了能够获取从给定时间戳到最后一条记录的所有记录,我添加了一个键
“measurement:last”
,该键将只保存排序集中最后一条输入记录的时间戳。这样我就可以使用ZRANGEBYSCORE
并将给定的时间戳设置为start
,最后一个时间戳设置为end
,听起来不错:)