最近我学习的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(欧姆端口),它支持一些quering,但我不知道,如果它得到的所有数据,然后在蟒蛇的过滤器。

有帮助吗?

解决方案

有关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

lrange usage 0 -1

要获得一定范围内的索引:

zrangebyscore usage 20100800 20100900

有关基于散列键值查询,有一个有益的补充redis的允许使用写在LUA脚本。你可以很容易地编写Python定界符内的一个简单的LUA脚本,并使用redis.eval方法将脚本传递给Redis的。该脚本可以使过滤器根据您正在寻找的价值循环。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top