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

Yud*_*tyo 10 hash sortedset redis 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
Run Code Online (Sandbox Code Playgroud)

然后将其转换为 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
Run Code Online (Sandbox Code Playgroud)

和排序集:

zadd log_date 1388534400 1
zadd log_date 1388534401 2
zadd log_date 1388534402 3
Run Code Online (Sandbox Code Playgroud)

我想执行查询就像 WHERE date beetween .... and ....

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

谢谢!

Dhr*_*hak 10

有两种可能的方式。

  1. 将数据保留在哈希中,日期作为排序集中的 unix 时间戳,并使用ZRANGE查询排序集以获取 id,然后使用这些 id 查询哈希

  2. 如果您的 MySQL 行数据很简单,即具有原始值的 2-3 列,我建议的另一种方法是将数据本身存储为 Sorted 集中的键,日期是 score

zadd log_date 1388534400 1_10.2

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


Ita*_*ber 3

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