如何根据redis中的日期范围获取数据

时间:2017-07-27 05:59:10

标签: hash redis sortedset zset

我在mysql中有一个日志数据

id |   value | date
1  |   10.2  | 2017-07-20 18:00:00
2  |   10.5  | 2017-07-20 18:00:01
3  |   10.3  | 2017-07-20 18:00:03

然后将其转换为redis中的hash dan排序集。 这是我的哈希:

hmset mylog:1 id 1 value 10.2 date 1388534400 
hmset mylog:2 id 2 value 10.5 date 1388534401
hmset mylog:3 id 3 value 10.3 date 1388534402

和排序集:

zadd log_date 1388534400 1
zadd log_date 1388534401 2
zadd log_date 1388534402 3

我想像WHERE date beetween .... and ....

一样执行查询

根据排序集中的日期范围,有没有办法从哈希中获取数据?

谢谢!

2 个答案:

答案 0 :(得分:2)

有两种可能的方法。

  1. 将数据保存为哈希值,将日期保存为有序集合中的unix时间戳,并使用ZRANGE查询已排序的集合以获取ID,然后使用这些ID查询哈希

  2. 如果您的MySQL行数据很简单,我推荐另一种方法,即2-3列具有原始值,是将数据本身存储为排序集中的键,日期为分数< /强>

  3. zadd log_date 1388534400 1_10.2

    分割键时元素的位置是固定的,因此[0]索引会给你id1索引会给你value。 这样,您的所有数据都将位于排序集中,您可以使用ZRANGE(带有WITHSCORE标志)查询数据,以获取所提供的unix时间戳日期内的所有数据以及日期。这种方法具有内存效率,还可以避免数据链接到两个点的问题,您必须在排序集和哈希中添加或删除数据。这里只需要排序集。

答案 1 :(得分:1)

为此,首先在排序集上执行查询以获取日期范围内的成员,然后获取相关的哈希值。