Redis的缓慢让大串(Redis is slow to get large strings)

2019-07-30 20:50发布

我是那种用的Redis对于新手,所以我道歉,如果这是一个愚蠢的问题。

我使用Django与Redis的作为高速缓存。

我酸洗〜200对象的集合,并将其存储在Redis的。

当我请求Redis的收集,Django的调试工具栏通知我请求的Redis正在〜3 。 我必须做一些可怕的错误。

  • 该服务器有3.5GB的RAM,它看起来像Redis的,目前只使用50MB〜,所以我敢肯定它没有运行内存不足。

  • 当我get使用Redis的-CLI的关键,它只是只要需要,当我做到这一点从Django中

  • 运行strlen从Redis的-CLI的关键,我得知,长度约20亿美元(这是太大了吗?)

我能做些什么有Redis的返回数据的速度更快? 如果这似乎是不寻常,什么可能是一些常见的陷阱? 我已经看到了这个网页上的延迟问题,但我没有真的跳了出来呢。

我不知道,如果它是一个非常糟糕的主意,大量的数据存储在一个关键,如果没有,只是有毛病我的配置。 任何帮助或建议或事物阅读将不胜感激。

Answer 1:

Redis的不是设计用来存储非常大的对象。 你不应该在您的整个集合存储在Redis的一个字符串,而是使用Redis的列表,或设置为你的对象的容器。

此外,咸菜格式不优化空间......你会需要一个更紧凑的格式。 协议缓冲区,MessagePack,甚至普通的JSON,可能是为了这个美好的。 你应该考虑将数据存储(如活泼的,LZO,Quicklz,LZF,等...)之前,应用光压缩算法。

最后,性能可能是网络的约束。 在我的机器,检索从Redis的一个20 MB对象花费85毫秒(未3秒)。 现在,如果我运行使用远程服务器相同的测试,它需要1.781秒,预计此100Mbit / s的网络。 持续时间完全依赖于网络带宽。

最后一点:一定要使用最新版本的Redis - 已经做了一些优化,以处理大对象。



Answer 2:

这是最有可能的字符串只是大小。 我想看看是否你的对象被有效地序列化。



文章来源: Redis is slow to get large strings