最近我在学习redis,真的很感动,很想用它。一直困扰我的一件事是“如何查询redis”。具体来说,我正试图解决以下问题
假设我有数百万的散列存储如下
usage:1 = {created: 20100521, quantity:9, resource:1033, user:1842, ...}
usage:2 = {created: 20100812, quantity:3, resource:7233, user:1842, ...}
usage:3 = {created: 20100927, quantity:4, resource:1031, user:76, ...}
请注意,在散列中有很多键,我只显示了4个。 现在我想查找特定日期范围内的记录,按用户、按资源或给定时间段内的用户。
我怀疑有redis特定的模式来检索这样的数据。我是一个python程序员。我确实看过redisco(ohm port),它支持一些查询,但我不确定它是否获得了所有数据,然后用python进行过滤。
你提到的问题很大程度上取决于时间。在这种情况下,明智的做法是使用排序集。您可以使用日期时间戳作为每个条目的分数。
例如,可以执行以下操作:
要检索所有内容:
或者
要获取范围的索引:
对于基于散列键值的查询,redis还有一个有用的附加功能,允许使用lua编写的脚本。您可以很容易地在python heredoc中编写一个简单的lua脚本,并使用redis.eval方法将该脚本传递给redis。脚本可以是一个循环,根据您要查找的值进行筛选。
对于Redis来说,在决定如何存储数据之前,最好先了解需要对数据使用哪种查询模式。
例如,如果要对一组数据执行日期范围查询,可以将该数据存储为排序集,其中键是要查询的数据项,而分数是unix时间戳。
在上面的示例中,我可以将示例哈希存储为:
也就是说,根据我想要支持的查询模式,我有很多正向和反向映射。
相关问题 更多 >
编程相关推荐