我是 Redis 的新手,所以如果这是一个愚蠢的问题,我深表歉意。
我使用 Django 和 Redis 作为缓存。
我正在腌制大约 200 个对象的集合并将其存储在 Redis 中。
当我从 Redis 请求集合时,Django 调试工具栏通知我对 Redis 的请求需要 ~3seconds。我一定是做了什么非常错误的事情。
服务器有 3.5GB 内存,看起来 Redis 目前只使用了约 50MB,所以我很确定它没有耗尽内存。
When I get
使用 redis-cli 的密钥与我从 Django 执行该密钥所需的时间一样长
Running strlen
从 redis-cli 的密钥上我得知长度约为 2000 万(这太大了吗?)
怎样才能让Redis更快地返回数据?如果这看起来不寻常,那么可能存在哪些常见陷阱?我见过这一页关于延迟问题,但还没有什么真正让我惊讶的。
我不确定在一个密钥中存储大量数据是否是一个非常糟糕的主意,或者我的配置是否有问题。任何帮助或建议或阅读的内容将不胜感激。
Redis 并不是为存储非常大的对象而设计的。您不应该将整个集合存储在 Redis 中的单个字符串中,而是使用 Redis 列表或集合作为对象的容器。
此外,pickle 格式并未针对空间进行优化......您需要更紧凑的格式。 Protocol Buffers、MessagePack,甚至纯 JSON 可能更适合此目的。您应该考虑在存储数据之前应用轻型压缩算法(例如 Snappy、LZO、Quicklz、LZF 等)。
最后,性能可能受网络限制。在我的机器上,从 Redis 检索 20 MB 的对象需要 85 毫秒(而不是 3 秒)。现在,如果我使用远程服务器运行相同的测试,则需要 1.781 秒,这在这个 100 Mbit/s 网络上是预期的。持续时间完全取决于网络带宽。
最后一点:一定要使用最新的Redis版本——已经做了一些优化来处理大对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)