从redis中检索大型数据集

时间:2014-07-10 15:56:24

标签: ubuntu networking redis

一台服务器上的应用程序查询在另一台服务器上运行的redis。结果数据集大约是来自查询zrangebyscore objects:locations -inf +inf的250k,在应用服务器上似乎需要40秒。

在redis服务器或应用服务器上使用redis-cli执行命令时,在这两种情况下,redis-cli报告的完成时间大约需要40秒。

在查询期间,redis服务器使用大约15%的CPU。

问题:需要40秒才能检索到被认为缓慢的250k记录?是否有可能加快它需要几秒钟?

1 个答案:

答案 0 :(得分:2)

首先,它取决于物品的平均大小。

在我的系统上,使用zrangebyscore检索10个字节的250K项仅需113 ms。 使用100个字节的项目,需要228毫秒。使用1 Kb项目,需要4033毫秒。

所以,除非你的物品比这大得多,我会说你的40秒响应时间非常糟糕。

Redis不适用于虚拟内存。如果Redis内存被换掉,性能通常是灾难性的,所以我要说你的第一个动作应该是避免Redis内存被换掉。

我会尝试转储Redis数据库(使用bgsave,以确保所有页面都回到RAM中),然后再次尝试zrangebyscore(以及几次)以查看响应时间是否更好。

更新

以下是我用来构建内容的命令:

$ python -c 'for x in range(0,250000): print "ZADD objects:locations 0.1 %0115d" % (x)' | redis-cli | wc

以下是我用来为查询计时的命令:

$ time redis-cli -h <hostname> zrangebyscore objects:locations -inf +inf >/dev/null