小编典典

Redis缓慢获取大字符串

redis

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

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

我正在腌制约200个对象的集合并将其存储在Redis中。

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

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

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

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

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

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


阅读 806

收藏
2020-06-20

共1个答案

小编典典

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

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

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

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

2020-06-20