2012-01-16 91 views
8

随着我们的数据集在工作中一直出现的东西是需要查询给定一系列键的一堆值。日期范围是一个明显的例子。使用redis获取一系列密钥?

我知道你可以使用UNIX时间戳和有序集合按日期范围进行查询,但似乎烦人,因为我必须要么

  1. 把整个文档的有序集合值,或
  2. 只需在其中添加ID,然后向每个密钥请求redis。

也许选项2是标准的吗?有没有办法一次询问多个键的redis?像mongodb的$ in查询?或者也许要求在管道中的一堆密钥一样快?

+0

选项2是标准的按键的数据。有一个多密钥的MGET。 http://redis.io/topics/twitter-clone – 2012-01-16 15:42:44

回答

6

选项2,将Ids放入有序集中,然后使用mget获取值,如果您的键是散列值,那么您需要发出多个hget,但优点是可以抽出实际对象的特定部分需要而不是一切。实践中速度非常快。

+0

有趣。我想你也想用管道呢?这是可能的,我想要经常这样拉出100个值。看起来这对于SORT也是可能的,对吧?它是否更慢? – 2012-01-16 17:20:21

+1

根据您使用的流水线语言/库,通常内置在Node.js中,node_redis将为您做到这一点,而无需额外的努力。你也可以使用排序技巧,但我不确定它是否以任何可衡量的方式实际上更快。很想看到它的一些基准。 – 2012-01-16 18:43:20

+0

您应该使用流水线,我测量了它的性能,使用10k键的速度大约快了5倍,结果在我的博客中http://blog.jmoz.co.uk/python-redis-py-pipeline – jmoz 2012-09-06 14:58:52

1

也许一些bash魔法有帮助吗?

echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli 

这将输出从所有与YOURKEY开始

+4

**重要注意:**'KEYS'命令被阻塞,如果你有很多数据可能需要很长时间。您可以通过这种方式取下服务器/应用程序。 – ceejayoz 2015-04-30 16:01:41