一尘不染

从Redis检索大型数据集

redis

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

redis-cliredis服务器或app服务器上使用命令执行命令时,在两种情况下,它们都需要大约40秒才能完成,如所述redis-cli

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

问题: 花费40秒检索250k记录是否很慢?是否有可能将其加速到几秒钟?


阅读 444

收藏
2020-06-20

共1个答案

一尘不染

首先,它取决于项目的平均大小。

在我的系统上,使用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
2020-06-20