我正在对数据流进行一些分析,并将结果发布在Redis通道上。消费者订阅这些频道并获得实时数据馈送。所有历史数据分析结果都将丢失。
现在,我想添加在Redis中存储历史数据的功能,以便消费者可以查询此历史数据(主要是按时间)。由于分析结果是按时间划分的,将结果存储在Redis中的最佳设计是什么?
使用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>