18

我正在对数据流执行一些分析并将结果发布到 Redis 通道上。消费者订阅这些频道并获得实时数据馈送。历史数据分析结果全部丢失。

现在我想在 Redis 中添加存储历史数据的功能,以便消费者可以查询这些历史数据(主要是按时间)。由于分析结果是按时间划分的,将结果存储在 Redis 中的好的设计是什么?

4

1 回答 1

39

使用 redis排序集

排序集基于“分数”存储数据,因此在您的情况下,只需使用以毫秒为单位的时间戳;数据将自动排序,允许您使用开始/结束日期范围检索历史项目,这是一个示例...

将项目添加到排序集...

zadd historical <timestamp> <dataValue>

..添加一些示例数据..

 zadd historical 1 data1
 zadd historical 2 data2
 zadd historical 3 data3
 zadd historical 4 data4
 zadd historical 5 data5
 zadd historical 6 data6
 zadd historical 7 data7

..使用开始/结束范围检索项目的子集...

 zrangebyscore historical 2 5

..返回...

1) "data2"
2) "data3"
3) "data4"
4) "data5"

因此,就您而言,如果您想检索最后一天的所有历史项目,只需执行此操作...

zrangebyscore historical <currentTimeInMillis - 86400000> <currentTimeInMillis> 
于 2013-06-17T18:36:08.063 回答