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
有两种可能的方式。
将数据保留在哈希中,日期作为排序集中的 unix 时间戳,并使用ZRANGE查询排序集以获取 id,然后使用这些 id 查询哈希
如果您的 MySQL 行数据很简单,即具有原始值的 2-3 列,我建议的另一种方法是将数据本身存储为 Sorted 集中的键,日期是 score。
zadd log_date 1388534400 1_10.2
分割键时元素的位置是固定的,因此 [0] 索引会给你id,1索引会给你value. 这样您的所有数据都将位于排序集中,您可以使用 ZRANGE(带有 WITHSCORE 标志)查询数据以获取所有数据以及提供的 unix 时间戳日期内的日期。这种方法是内存高效的,并且还可以避免数据链接到两个点的问题,您必须在排序集中添加或删除数据以及散列。这里只需要排序集。