Python redis中的查询

Python redis中的查询,python,nosql,redis,Python,Nosql,Redis,最近,我正在学习redis,老实说,我对它印象深刻,非常渴望使用它。一直困扰我的一件事是“我如何查询redis”。具体来说,我正在努力解决以下问题 假设我存储了数百万个哈希,如下所示 usage:1 = {created: 20100521, quantity:9, resource:1033, user:1842, ...} usage:2 = {created: 20100812, quantity:3, resource:7233, user:1842, ...} usage:3 = {c

最近,我正在学习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,在决定如何存储数据之前,最好先了解您希望对数据使用哪种查询模式

例如,如果要对一组数据执行日期范围查询,可以将该数据存储为排序集,其中键是要查询的数据项,分数是unix时间戳

在上面的示例中,我可能会将您的示例哈希存储为:

 user_to_resource:i = user:j                   # key -> value forward map
 resources => (resource:i, created_timestamp)  # sorted set
 count_resource:i = quantity                   # key -> value quantity map

也就是说,根据我希望支持的查询模式,我会有许多正向和反向映射。

您提到的查询高度依赖于时间。在这种情况下,明智的做法是使用排序集。您可以使用日期时间戳作为每个条目的分数

例如,您可以执行以下操作:

hmset usage:1 created 20100521 quantity 9 resource 1033 user 1842
hmset usage:2 created 20100812 quantity 3 resource 7233 user 1842
hmset usage:3 created 20100927 quantity 4 resource 1031 user 76

zadd usage 20200521 1
zadd usage 20100812 2
zadd usage 20100927 3
要检索所有内容,请执行以下操作:

sort usage get 
# get usage:*->created get usage:*->quantity get usage:*->resource get usage:*->user

要获取范围的索引,请执行以下操作:

zrangebyscore usage 20100800 20100900

对于基于散列键值的查询,redis中添加了一个有用的功能,允许使用lua编写的脚本。您可以在PythonHerdeoc中轻松编写一个简单的lua脚本,并使用redis.eval方法将脚本传递给redis。脚本可以是一个循环,根据您要查找的值进行过滤。

认为分享以下免责声明会很有用:指向我自己的博客的指针
zrangebyscore usage 20100800 20100900