一台服务器上的应用程序查询在另一台服务器上运行的redis。来自查询的结果数据集大约为25万zrangebyscore objects:locations -inf +inf,在应用服务器上似乎需要40秒。
zrangebyscore objects:locations -inf +inf
在redis-cliredis服务器或app服务器上使用命令执行命令时,在两种情况下,它们都需要大约40秒才能完成,如所述redis-cli。
redis-cli
在查询期间,redis服务器使用大约15%的CPU。
问题: 花费40秒检索250k记录是否很慢?是否有可能将其加速到几秒钟?
首先,它取决于项目的平均大小。
在我的系统上,使用zrangebyscore检索10万个字节的250K项仅需113毫秒。对于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