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更快地返回数据?如果这看起来不寻常,可能会有一些常见的陷阱?我已经看过有关延迟问题的页面,但是还没有真正跳出来。
我不确定将大量数据存储在一个密钥中是否真的是个坏主意,或者我的配置是否有问题。任何帮助或建议或阅读的东西将不胜感激。
回答:
Redis并非用于存储非常大的对象。您不应将整个集合存储在Redis中的单个字符串中,而应使用Redis列表或将其设置为对象的容器。
此外,泡菜格式并未针对空间进行优化…您将需要更紧凑的格式。协议缓冲区,MessagePack甚至纯JSON可能对此更好。您应该在存储数据(例如Snappy,LZO,Quicklz,LZF等)之前考虑应用光压缩算法。
最后,性能可能受网络限制。在我的机器上,从Redis检索20
MB对象需要85毫秒(而不是3秒)。现在,如果我使用远程服务器运行相同的测试,则需要1.781秒,这在此100 Mbit /
s网络上是可以预期的。持续时间完全取决于网络带宽。
最后一点:请确保使用最新的Redis版本-已经做了许多优化来处理大型对象。
以上是 Redis缓慢获取大字符串 的全部内容, 来源链接: utcz.com/qa/427104.html