Redis 慢命令快照小工具:用 SLOWLOG 定位接口延迟
接口突然变慢时,很多团队第一反应是去看应用日志。但如果日志只显示某个 Redis 调用耗时偏高,却没有记录具体命令和 Key,排查会很被动。Redis 自带的 SLOWLOG 能记录超过阈值的慢命令,本篇用一个小工具把慢命令采样、解析和聚合串起来,生成一份可以直接贴进排障记录的 Markdown 快照报告。
目录
- 项目目标:做一个 Redis 慢命令快照小工具
- 环境准备:确认 SLOWLOG 阈值和样例数据
- 核心代码:采集、解析和聚合慢命令
- 本地运行:生成 Markdown 快照报告
- 部署集成:接入巡检任务但控制频率
- 验收:用样例慢命令确认报告可读
项目目标:做一个 Redis 慢命令快照小工具
这个工具只解决一个明确问题:当接口 P95 延迟升高时,快速拿到 Redis 慢命令样本,并把它们整理成“哪个命令最慢、哪个 Key 最可疑、慢了多少、下一步该看哪里”。它不代替 APM,也不长期高频扫描 Redis,只负责在排查窗口内生成一份可读快照。
最终报告应该至少包含四类信息:
- 当前慢查询阈值,例如
slowlog-log-slower-than = 10000us。 - 采集到的慢命令数量、最高耗时、平均耗时。
- 按命令类型聚合后的耗时分布,例如
HGETALL、GET、ZRANGE。 - 可疑 Key 示例,方便回到业务代码确认数据结构和访问路径。

环境准备:确认 SLOWLOG 阈值和样例数据
先确认 Redis 能记录你关心的慢命令。slowlog-log-slower-than 的单位是微秒,设置为 10000 表示超过 10ms 的命令会进入慢日志。线上环境不要为了测试随意调得过低,否则慢日志会被普通请求快速刷满。
redis-cli CONFIG GET slowlog-log-slower-than redis-cli SLOWLOG LEN redis-cli SLOWLOG GET 10 redis-cli LATENCY LATEST
如果 SLOWLOG LEN 一直为 0,可能是阈值太高,也可能是 Redis 本身不是瓶颈。此时应先对照应用侧耗时、网络延迟和实例负载,不要把所有慢接口都归因到 Redis。
核心代码:采集、解析和聚合慢命令
下面用 Python 写一个最小版本。它从 Redis 读取最近的慢命令,过滤掉低于阈值的样本,再按命令类型聚合总耗时和平均耗时。为了让报告更容易回溯,代码会保留第一段 Key 线索。
from collections import Counter
from pathlib import Path
import argparse
import redis
def normalize_command(item):
parts = item.get("command", b"").decode("utf-8", "replace").split()
name = parts[0].upper() if parts else "UNKNOWN"
key_hint = parts[1] if len(parts) > 1 else "-"
return name, key_hint
def parse_rows(rows, threshold_us):
parsed = []
for row in rows:
cost = int(row.get("duration", 0))
if cost
这里没有做复杂封装,原因是排障工具最重要的是结果稳定、输出直观。真正进入团队工具箱时,可以再补充连接超时、认证参数、实例名称、报告归档路径和告警链接。
本地运行:生成 Markdown 快照报告
安装依赖后运行脚本,先用较小的 limit 验证输出,再根据 Redis 实例慢日志长度扩大采样范围。阈值建议与实例配置保持一致,避免报告和 Redis 配置口径不一致。
python3 -m pip install redis python3 slowlog_snapshot.py \ --host 10.0.0.5 \ --port 6379 \ --limit 10 \ --threshold-us 10000 \ --out report.md
如果报告里某个命令总耗时明显偏高,下一步不要只盯 Redis 参数。比如 HGETALL cart:uid:8821 频繁出现时,更应该检查 Hash 字段数量是否膨胀;ZRANGE rank:list 0 5000 出现时,则要回到分页范围和业务访问路径。
部署集成:接入巡检任务但控制频率
这个工具适合接入低频巡检任务,例如接口延迟告警触发后运行一次,或发布前针对关键 Redis 实例运行一次。不要把它做成每秒轮询的常驻任务,因为慢日志本身是环形缓冲,过度读取不会增加诊断价值,反而会让排障动作变得噪声很大。
一个更稳妥的集成方式是:
- 接口延迟告警触发后,人工或自动拉取一次慢命令快照。
- 报告文件带上实例名、环境名、采集时间和业务接口名。
- 只在报告里保留 Key 前缀或脱敏 Key,避免泄露用户标识。
- 排障完成后记录处理动作,例如拆分大 Hash、限制范围查询、补充本地缓存。
验收:用样例慢命令确认报告可读
验收不是看脚本能否打印 [OK],而是看报告能否让接手排查的人马上判断方向。可以准备一组样例慢命令,确认报告能识别最高耗时、Top 命令、样例 Key 和聚合表格。

建议用下面这张检查表收尾:
SLOWLOG GET返回的样本数和报告样本数一致。- 耗时单位保持微秒,报告中如需展示毫秒必须显式换算。
- Top 命令和最高耗时样本能对应到原始慢日志。
- 报告中没有敏感 Key 全量值,只保留排查所需线索。
- 结论能落到下一步动作,例如改访问范围、拆字段、加缓存或调整数据结构。
排查 Redis 慢命令时,工具越贴近真实工作流越有价值。先把慢日志样本变成可读报告,再结合接口日志和业务代码定位访问模式,通常比单纯截图终端输出更容易形成闭环。
前端接口超时告警运行手册:从瀑布图到降级回滚
- 上一篇
- 前端接口超时告警运行手册:从瀑布图到降级回滚
- 下一篇
- Go slog 结构化日志实践:从请求字段到检索定位
-
- 数据库 · Redis | 4小时前 | Redis · 缓存治理 · Keyspace Notifications · 过期事件 · redis Pub/Sub Keyspace Notifications 过期事件 缓存监听 补偿任务
- Redis 过期事件监听实践:用 Keyspace Notifications 做轻量补偿
- 181浏览 收藏
-
- 数据库 · Redis | 1星期前 | Redis · Streams · 消费者组 · Pending · XACK · 消息堆积 消费者组 XACK XPENDING XAUTOCLAIM Redis Streams
- Redis Streams 消费者组消息堆积怎么办:从 XPENDING 到 XACK 一步步排查
- 385浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 2769次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 2563次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 2508次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 2738次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 2686次使用
-
- Go与Redis实现分布式互斥锁和红锁
- 2022-12-22 117浏览
-
- golang gorm框架数据库的连接操作示例
- 2022-12-24 293浏览
-
- golang连接redis库及基本操作示例过程
- 2022-12-25 296浏览
-
- Golang 实现 Redis系列(六)如何实现 pipeline 模式的 redis 客户端
- 2022-12-27 416浏览
-
- Go语言操作数据库及其常规操作的示例代码
- 2022-12-27 135浏览

