一台服务器上的应用程序查询在另一台服务器上运行的redis。结果数据集大约是来自查询zrangebyscore objects:locations -inf +inf
的250k,在应用服务器上似乎需要40秒。
在redis服务器或应用服务器上使用redis-cli
执行命令时,在这两种情况下,redis-cli
报告的完成时间大约需要40秒。
在查询期间,redis服务器使用大约15%的CPU。
问题:需要40秒才能检索到被认为缓慢的250k记录?是否有可能加快它需要几秒钟?
答案 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