当前位置: 首页 > 面试题库 >

Redis缓慢获取大字符串

贲培
2023-03-14
问题内容

我对Redis有点陌生,所以如果这是一个愚蠢的问题,我深表歉意。

我正在将Django与Redis用作缓存。

我正在腌制约200个对象的html" target="_blank">集合并将其存储在Redis中。

当我从Redis请求收集时,Django Debug Toolbar通知我对Redis的请求大约需要3 秒钟 。我一定在做些可怕的错误。

  • 该服务器具有3.5GB的ram,看起来Redis当前仅使用约50mb,因此我敢肯定它不会耗尽内存。

  • 当我get使用redis-cli键时,它花费的时间与从Django执行时一样长

  • strlen在redis-cli的密钥上运行时,我得知长度约为2000万(这太大了吗?)

如何使Redis更快地返回数据?如果这看起来不寻常,可能会有一些常见的陷阱?我已经看过有关延迟问题的页面,但是还没有真正跳出来。

我不确定将大量数据存储在一个密钥中是否真的是个坏主意,或者我的配置是否有问题。任何帮助或建议或阅读的东西将不胜感激。


问题答案:

Redis并非用于存储非常大的对象。您不应将整个集合存储在Redis中的单个字符串中,而应使用Redis列表或将其设置为对象的容器。

此外,泡菜格式并未针对空间进行优化…您将需要更紧凑的格式。协议缓冲区,MessagePack甚至纯JSON可能对此更好。您应该在存储数据(例如Snappy,LZO,Quicklz,LZF等)之前考虑应用光压缩算法。

最后,性能可能受网络限制。在我的机器上,从Redis检索20
MB对象需要85毫秒(而不是3秒)。现在,如果我使用远程服务器运行相同的测试,则需要1.781秒,这在此100 Mbit /
s网络上是可以预期的。持续时间完全取决于网络带宽。

最后一点:请确保使用最新的Redis版本-已经做了许多优化来处理大型对象。



 类似资料:
  • 问题内容: 这是两个非常相似的地方。 实施:https : //gist.github.com/bgreenlee/52d93a1d8fa1b8c1f38b 和实现:https : //gist.github.com/boratlibre/1593632 在一个是慢得多然后实现我送给几个小时,使其速度更快,但......好像阵列和操作是不一样快。 在2000年的计算中,执行速度比慢约100(!!!

  • 我正在维护一个Julia库,其中包含一个函数,用于在长字符串中每80个字符后插入一行新行。 当字符串长度超过100万个字符时,此函数将变得非常慢(秒或更长)。时间的增长似乎不仅仅是线性的,可能是二次的。我不明白为什么。有人能解释一下吗? 这是一些可复制的代码: 似乎这一行是大部分时间花费的地方: 这是否意味着初始化一个新的需要很长时间?这并不能真正解释超线性运行时间。 我知道构建字符串的标准快速方

  • 问题内容: 我已经写了一个工作正常的n元树ADT。但是,我需要将其序列化存储在调用类的变量中。例如。 我已经编写了可以完全满足我的需要的方法,但是在非常大的输入上,它要花很多时间(在100MB的xml文件上需要20分钟)-我已经对方法进行了计时,并且从xml文件构建树的速度很快,但是调用上面显示的toString()非常慢。 我猜想这与字符串的构建方式有关,而不是与如何遍历树有关?有一个更好的方法

  • 问题内容: 例如,我得到一个字符串: 我想将其写入文件。 但是在将字符串写入文件之前,我需要知道字符串的大小。我可以使用什么函数来计算字符串的大小? 问题答案: 如果您在谈论字符串的长度,则可以使用: 如果您需要以字节为单位的字符串大小,则需要: 另外,不要调用您的字符串变量。它遮盖了内置功能。

  • 问题内容: 如何在PHP中获取字符串的前n个字符?将字符串修剪为特定数量的字符并在需要时附加“ …”的最快方法是什么? 问题答案: 更新: 基于检查长度的建议(并确保修剪后的和未修剪的琴弦的长度相似): 因此,您将获得最多13个字符的字符串;13个(或更少)普通字符或10个字符,后跟“ …” 更新2: 或作为功能: 更新3: 自从我写了这个答案已经有一段时间了,我实际上不再使用此代码了。我更喜欢这

  • 我知道如何计算出字符串中某个字符或数字的索引,但是有没有任何预定义的方法可以用来给我第n个位置的字符?所以在字符串“foo”中,如果我要求索引为0的字符,它会返回“f”。 注意——在上面的问题中,我所说的“字符”不是指字符数据类型,而是字符串中的字母或数字。这里重要的一点是,调用该方法时,我不会收到char,而是一个字符串(长度为1)。我知道substring()方法,但我想知道是否有更简洁的方法