634 字
3 分钟
Redis 变慢时如何排查?SLOWLOG 能看到所有耗时吗?
  1. 1Redis 系列导读:知识地图、必会主线与复习顺序
  2. 2Redis 中常见的数据类型有哪些?
  3. 3Redis 通常应用于哪些场景?
  4. 4Redis为什么这么快?
  5. 5Redis 常用的过期时间、删除 Key 命令有哪些?
  6. 6Redis 的过期 Key 是如何被删除的?
  7. 7Redis 内存满了怎么办?有哪些淘汰策略?
  8. 8缓存穿透、击穿、雪崩的区别与解决方案
  9. 9Redis 如何保证缓存与数据库的数据一致性?
  10. 10Redis 的持久化机制有哪些?
  11. 11Redis 主从复制的完整流程是什么?
  12. 12Redis 的哨兵机制是什么?
  13. 13Redis Cluster 模式与 Sentinel 模式的区别是什么?
  14. 14Redis 支持事务吗?如何实现?
  15. 15Redis 中如何实现分布式锁?
  16. 16Redis 的 Lua 脚本功能是什么?如何使用?
  17. 17如何解决 Redis 中的热点 Key 问题?
  18. 18Redis BigKey 有什么危害?如何发现和治理?
  19. 19为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  20. 20Redis 的 LRU 和 LFU 有什么区别?
  21. 21Redis 数据类型和底层编码有什么区别?
  22. 22Redis 中跳表的实现原理是什么?
  23. 23Redis 的 ZSet 为什么使用跳表,而不是平衡树?
  24. 24Redis 的 RDB 快照如何生成?为什么会有写时复制?
  25. 25Redis 的 AOF 刷盘和重写有什么区别?
  26. 26Redis 断线后如何通过 PSYNC 部分重同步?
  27. 27Redis 主从切换为什么会丢数据?WAIT 能解决吗?
  28. 28Redis 集群会出现脑裂问题吗?
  29. 29Redisson 看门狗(watch dog)机制了解吗?
  30. 30Redis Cluster:哈希槽、Gossip 与故障转移
  31. 31Redis Pipeline 为什么能提高吞吐?能保证原子性吗?
  32. 32Redis 的 SCAN 和 KEYS 有什么区别?
  33. 33Redis 变慢时如何排查?SLOWLOG 能看到所有耗时吗?本文
  34. 34Redis 和 MySQL 有什么区别?
  35. 35Redis 为什么使用 SDS,而不是 C 字符串?
  36. 36Redis 的哈希表如何处理冲突和渐进式 rehash?
  37. 37Redis Cluster 的 MOVED 和 ASK 重定向有什么区别?
  38. 38Redis Cluster 为什么会报 CROSSSLOT?Hash Tag 怎么用?
  39. 39Redis 如何实现限流?固定窗口和滑动窗口怎么选?
  40. 40Redis Stream 如何保证消息消费?ACK 和 PEL 是什么?
  41. 41Redis 删除数据后为什么内存不下降?如何理解内存碎片?

应用一次 Redis 调用的耗时,包含连接池等待、请求排队、网络传输、服务端执行与响应处理。SLOWLOG 主要记录命令执行耗时,不包含所有客户端端到端时间。 应用 P99 升高但慢日志为空,不能因此判定 Redis 链路正常。

按证据缩小范围#

先确认是所有命令还是某类操作变慢,记录时间窗口、实例、命令和响应大小,比较应用端和服务端指标。连接池等待高时检查池容量与调用堆积;网络 RTT 高或响应很大时检查网络与 BigKey;服务端执行时间高时检查复杂命令、Lua 长循环和全量扫描。

可以读取以下信息,具体权限和配置以环境为准:

SLOWLOG GET 20
INFO commandstats
INFO stats
INFO memory
INFO persistence
INFO replication
LATENCY DOCTOR

SLOWLOG 阈值使用微秒,日志容量有限。LATENCY 监测依赖相关配置,不是默认无条件记录所有事件;生产环境修改阈值需要评估采集成本。还要注意慢日志参数可能含业务敏感信息,展示与导出时应脱敏。

常见原因如何关联?#

CPU 饱和要区分热点命令与其他进程竞争;fork 延迟、AOF 同步、COW 增长可结合持久化指标;内存不足和 swap 会显著放大延迟。大规模过期、淘汰和复制重同步也会增加工作量。诊断时用故障时间窗口关联指标,避免只看某一时刻的平均 CPU。

常见追问#

为什么 GET 执行很快,应用却要等几十毫秒?#

可能在连接池、主线程前的队列、网络或客户端解析上等待。服务端 GET 的执行时间只覆盖调用链中的一段。

开启 I/O 多线程能解决所有慢命令吗?#

不能。Redis 6/7 常见设计仍以主线程执行核心命令,多线程网络处理无法消除长 Lua 或巨大集合遍历造成的串行占用。

MONITOR 适合长期作为生产追踪工具吗?#

不宜默认长期全量使用,它会产生输出与处理成本,并可能暴露命令参数。优先使用已有指标、采样与针对性诊断。

平均延迟正常就代表服务正常吗?#

不代表。少量长暂停可显著影响 P99 和业务超时,应同时看尾延迟、超时比例与突发事件。

Redis 变慢时如何排查?SLOWLOG 能看到所有耗时吗?
https://blog.xqcherry.top/posts/interview/redis/redis-slowlog-latency-diagnosis/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0