Redis 工作/响应缓慢的原因可能是什么?
即我在 Stackoverflow 上发现,在 Redis 中存储大文件或数据会使速度变慢。还有什么?
最佳答案
这个问题没有简单的答案。对于所有基于 NoSQL 或 SQL 的存储解决方案,有很多情况可能会导致存储引擎的高延迟或缓慢。 Redis 也不异常(exception)。
我建议从阅读开始:
以下是潜在原因的非详尽列表:
- 硬件不足(网络、内存、CPU)
- 基于软件的虚拟化(例如低端硬件上的 Xen)
- 内存不足,在操作系统级别产生交换
- 在单线程引擎中执行了过多的 O(n) 操作(如 KEYS)
- Redis 中存储的大型对象,导致通信缓冲区不受控制地扩展
- 大量的同时 session (>30000)
- 每秒连接操作太多(Redis 不是网络服务器,连接应该是永久的,而不是暂时的)。
- 客户端应用程序生成的往返次数过多(未使用流水线或聚合命令)
- 由 bgsave 或 AOF 重写生成的大型 fork 操作(尤其是在 VM 上)
- 使用 AOF 时与 I/O 相关的延迟
- 累积多次同时触发的过期操作
- 客户端和主/从通信缓冲区中的内存积累,或缓慢的日志数据
- TCP incast conditions当网络带宽消耗很大时
- 使用分布式存储(尤其是云存储,如 EC2 EBS)来存储转储或 AOF 文件
可能还有许多其他原因,与您自己的应用程序产生的工作负载有关。
如果有人考虑其他一般原因,我们可以将他们添加到此列表中。
关于database - Redis变慢的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13450794/