首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis MGET性能

Redis MGET性能
EN

Stack Overflow用户
提问于 2019-07-17 12:49:08
回答 1查看 4.4K关注 0票数 4

我正在尝试从redis库加载使用mget(r.keys())的redis数据库中的所有值。在db中有接近100 k的密钥,每个值对的大小为40 db。在一台内存超过64 to的windows机器上,这需要近38秒的时间。

我已经加载了100 shown,将numpy数组转储到redis数据库中,并运行下面所示的代码来捕获读取数据所需的时间。

代码语言:javascript
复制
import redis
import time
start=time.time()
r=redis.StrictRedis(host='localhost',port=6379,db=0)
test=r.mget(r.keys())
print(time.time()-start)

在一台有>50 of空闲RAM的windows机器上,所花费的时间是38秒。我在运行时检查了系统性能,没有瓶颈。我期望更快的阅读性能,但是有人可以确认这是预期的行为还是我做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-17 14:55:19

不建议使用r.keys(),应该考虑使用scan()

通过调用keys(),您基本上是要求Redis生成所有键的列表,并将它们返回给客户端,这是一个长期的阻塞操作。

然后,通过调用r.mget(),将包含100 k键的所有列表发送回Redis,并要求它生成所有散列的一个大结果。

我建议您切换到使用scan()并对来自Redis的结果进行批处理。最后,一旦您进入批处理,以避免等待每批返回之前,您要求下一批,您可能想使用对线。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57076258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档