我在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 ....
有没有可能根据排序集中的日期范围从哈希中获取数据?
谢谢!
为什么我会在 aredis sorted set上使用按 unix 时间戳排序的a of 文章redis list并将元素推送到它上面。它们似乎提供了相同的最终结果。我注意到的一件事是,redis sorted set您可以与其他集合和 zset 进行交集
当我为我的数据库研究 Redis 时,我了解到“Zset”的意思是“排序集”。“Zset”实际上代表什么?我不明白为什么它也意味着“排序集”。
这可能是简单的或过于宽泛的问题,但我想确切地了解我学到了什么。
ZSETs 用于在 redis 中存储排序集。我用于spring-data-redisZSetOperations。
所有范围方法都返回Set<>而不是SortedSet<>,我想知道其背后的原因是什么?
另外,由于这些不返回排序集,所有反向范围操作是否都会变得多余,因为无论如何都不会维护顺序,并且我们不能只获取索引处的任何元素?
我可能会遗漏一些非常明显的东西,请原谅我在这件事上的天真。
我的用例:
我正在存储带有日期的值作为分数。我想获取两个日期之间的所有值,检查计数并使用最近的日期。
我本来打算做类似的事情:
// get reverse sorted values, with most recent date being on top
SrotedSet<String> values = zSetOperations.rangeByScore(key, this.getBeginDate(), this.getEndDate());
// check values size and do values.get(0) i.e. the most recent date.
Run Code Online (Sandbox Code Playgroud)
但返回类型rangeByScore为Set,因此没有“get”操作。
我必须获得分数范围,然后自己对它们进行排序。
或者我必须转换为数组并获取元素。
或者做类似的事情values.iterator().next()