Redis获取大字符串的速度很慢

Nic*_*nis 8 django performance caching 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更快地返回数据?如果这看起来不寻常,那可能是一些常见的陷阱?我已经看过这个关于延迟问题的页面了,但是我还没有真正跳出来.

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

Did*_*zia 17

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

此外,泡菜格式没有针对空间进行优化......您需要更紧凑的格式.协议缓冲区,MessagePack甚至普通的JSON可能更适合这种情况.您应该考虑在存储数据之前应用轻压缩算法(如Snappy,LZO,Quicklz,LZF等).

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

最后一点:确保使用最近的Redis版本 - 已经完成了许多优化来处理大型对象.