Redis 内存不足导致查询慢但在慢日志中找不到

标签 redis nosql

有时我的查询需要几秒钟才能从 Redis 获取 key 。 Redis 信息显示 used_memory 比 used_memory_rss 大 2 倍,操作系统开始使用交换。 清理无用数据后,used_memory 低于used_memory_rss,一切正常。

让我感到困惑的是:如果任何查询花费 10 秒并阻止对 redis 的其他查询会导致应用程序的其他部分出现严重问题,但对应用程序来说似乎没问题。 而且我在慢速日志中找不到任何这么长时间的查询,所以我检查了 redis SLOWLOG 命令,它说

执行时间不包括 I/O 操作,如与客户端对话、发送回复等,只包括实际执行命令所需的时间(这是命令执行的唯一阶段线程被阻塞,无法同时处理其他请求)

如果这意味着查询的执行是正常的并且没有阻塞任何其他查询?当内存不够导致长时间查询时,查询会发生什么?这些查询的哪一部分花费了这么长时间,因为“实际执行命令”的时间成本不足以进入 slowlog?

谢谢!

最佳答案

当内存不足时,Redis 肯定会变慢,因为它会开始交换。您可以使用 INFO 报告 Redis 使用的内存量,甚至您可以设置内存使用的最大限制,使用 maxmemory 选项配置文件来限制 Redis 可以使用的内存。如果达到此限制,Redis 将开始回复写入命令的错误(但将继续接受只读命令),

关于Redis 内存不足导致查询慢但在慢日志中找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37783125/

相关文章:

Django 使用多个redis进行缓存

Redis概念: In memory or DB?

redis - 我应该在 Redis 中为通知系统使用哪种数据结构?

nosql - 最快最稳定的非 sql 数据库?

mongodb - 如果不存在,如何在所有文档中插入字段

python - 线程安全的redis客户端

ruby - 知道工作人员已在 Resque 中完成作业/流程的方法

java - MongoDB java驱动程序获取记录,其中日期和用户之间

java - java中的多线程持久队列

nosql - 在 cassandra 中强制进行小压缩?