我在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 ....
根据排序集中的日期范围,有没有办法从哈希中获取数据?
谢谢!
答案 0 :(得分:2)
有两种可能的方法。
将数据保存为哈希值,将日期保存为有序集合中的unix时间戳,并使用ZRANGE查询已排序的集合以获取ID,然后使用这些ID查询哈希
如果您的MySQL行数据很简单,我推荐另一种方法,即2-3列具有原始值,是将数据本身存储为排序集中的键,日期为分数< /强>
zadd log_date 1388534400 1_10.2
分割键时元素的位置是固定的,因此[0]索引会给你id
,1索引会给你value
。
这样,您的所有数据都将位于排序集中,您可以使用ZRANGE(带有WITHSCORE标志)查询数据,以获取所提供的unix时间戳日期内的所有数据以及日期。这种方法具有内存效率,还可以避免数据链接到两个点的问题,您必须在排序集和哈希中添加或删除数据。这里只需要排序集。
答案 1 :(得分:1)
为此,首先在排序集上执行查询以获取日期范围内的成员,然后获取相关的哈希值。