当前位置:首页 > 文章列表 > 数据库 > Redis > Redis SLOWLOG 怎样读取并控制记录数量

Redis SLOWLOG 怎样读取并控制记录数量

来源:17golang原创 2026-11-11 20:54:07 0浏览 收藏

我排查 Redis 延迟时,最容易先做错的一件事,就是把“这次想看几条”和“Redis 要保留几条”混成一个问题。SLOWLOG GET [count] 只控制本次读取的数量,slowlog-max-len 才控制慢日志容器最多保留多少条;SLOWLOG LEN 用来查看当前实际有多少条记录。

想快速查看最近 10 条,用 SLOWLOG GET 10;想知道当前容器里有多少条,用 SLOWLOG LEN;想改变保留容量,再调整 slowlog-max-len。读取上限和保留上限是两条独立的线。

官方地址:https://redis.io/docs/latest/commands/slowlog/

下面按我实际排查时的顺序,把这三个动作串起来。示例只说明命令关系,不代表某个实例已经产生了同样的输出。

先把“读取数量”和“保留数量”拆开

Redis 慢日志会记录超过 slowlog-log-slower-than 阈值的命令执行时间,但这个执行时间不包含网络收发等 I/O。记录进入一个有最大长度的容器,最大长度由 slowlog-max-len 决定;容器达到上限后,新记录进入时会淘汰较早的记录。

而 SLOWLOG GET 的可选参数 count 只是读取窗口:省略时默认返回最近 10 条,传入正数时最多返回对应条数,传入 -1 时读取当前容器里所有现有记录。它不会把慢日志的容量改大。

Redis SLOWLOG GET、SLOWLOG LEN 与 slowlog-max-len 控制关系的静态说明图
图1:读取窗口、当前记录数和保留容量之间关系的静态说明图,不是运行截图。

只看最近几条时,用 SLOWLOG GET 的 count

日常排查通常先取一个小窗口,避免一次返回过多内容。下面的命令分别表示默认窗口、最近 5 条和全部现有记录:

# 默认返回最近 10 条,适合先快速判断是否有新慢命令
redis-cli SLOWLOG GET

# 只读取最近 5 条,count 只影响本次响应的条数
redis-cli SLOWLOG GET 5

# 读取当前容器里已有的全部记录,不会改变 slowlog-max-len
redis-cli SLOWLOG GET -1

SLOWLOG GET 返回的每条记录包含一个递增 ID、Unix 时间戳、执行耗时(微秒)、命令参数,以及客户端地址和客户端名称等信息。读取多条时,官方文档将结果描述为按时间顺序返回;排查时可以先按 ID 记住已经看过的边界,避免重复处理同一批记录。

如果只是想知道日志有没有装满,不需要先把明细全部取出来。先用 SLOWLOG LEN 看当前条数,往往更轻。

用 SLOWLOG LEN 判断当前还剩多少记录

SLOWLOG LEN 返回当前慢日志中的记录数,时间复杂度是 O(1)。它回答的是“现在容器里有多少条”,不是“从启动以来总共出现过多少条”。

# 先读取当前记录数,再决定是否扩大本次 GET 的窗口
redis-cli SLOWLOG LEN

# 记录数较少时再读取全部现有条目
redis-cli SLOWLOG GET -1
命令或配置回答的问题是否改变保留容量
SLOWLOG GET 5这次最多返回几条否
SLOWLOG GET -1把当前容器已有记录都读出来否
SLOWLOG LEN当前容器里有几条否
slowlog-max-len最多保留几条是

真正控制记录数量,要调整 slowlog-max-len

如果问题是“慢日志留得太少,过一会儿就找不到早先的记录”,要看的不是 SLOWLOG GET 的参数,而是 slowlog-max-len。可以先读取当前值,再按实例容量和排查周期设置新的上限。

# 查看当前慢日志最大保留数量
redis-cli CONFIG GET slowlog-max-len

# 临时调整运行中的实例;数值表示最多保留多少条慢日志
redis-cli CONFIG SET slowlog-max-len 256

# 调整后再次查看,确认配置查询返回的是目标值
redis-cli CONFIG GET slowlog-max-len

通过 CONFIG SET 改的是运行中的配置,不会自动改写磁盘上的 redis.conf。如果这个值要在重启后继续生效,还需要把对应配置同步到配置文件,或按部署方式执行配置重写。线上调整前还要考虑管理员权限和实例托管平台是否允许修改。

设置得更大并不等于能找回已经淘汰的旧记录;它只影响后续容器可保留的上限。设置得太小,则可能在你准备读取之前就被新的慢命令挤掉。

Redis SLOWLOG 单条记录字段与读取上限和保留上限的静态说明图
图2:单条慢日志字段与 GET 读取上限、slowlog-max-len 保留上限的静态说明图,不是 Redis 控制台截图。

我会采用的日常排查顺序

在实际值班中,我通常不直接执行 SLOWLOG GET -1,而是先查数量、再取窗口、最后决定是否调整容量。这样既能快速看到现象,也不会因为一次读取太多记录而让排查本身变得嘈杂。

# 第一步:确认当前容器里是否有记录
redis-cli SLOWLOG LEN

# 第二步:先拿最近 20 条,聚焦当前问题时间段
redis-cli SLOWLOG GET 20

# 第三步:只有在记录量可控时,才读取全部现有记录
redis-cli SLOWLOG GET -1

# 第四步:确认保留容量,避免把读取窗口误当成容量配置
redis-cli CONFIG GET slowlog-max-len

这里的“记录量可控”需要结合实例权限、客户端返回大小和排查目的判断。GET -1 适合一次性导出当前小容量日志,不适合把它当成长期采集方案;如果要持续监控,还应使用专门的监控和日志处理链路。

几个容易踩到的边界

把 GET 5 改成 GET 100,会不会让 Redis 多保留日志? 不会。它只改变这一次最多返回 100 条,容器里的最大保留量仍由 slowlog-max-len 决定。

GET -1 能看到所有历史慢命令吗? 不能。它只能读取当前容器仍然保留的全部记录,已经因容量淘汰或执行 SLOWLOG RESET 清掉的内容无法通过它恢复。

SLOWLOG LEN 返回 128,是不是说明系统只发生过 128 次慢命令? 不是。它只说明当前容器有 128 条,历史上更多的记录可能已经被新记录淘汰。

能不能用 RESET 代替控制容量? 不建议。SLOWLOG RESET 是清空现有记录的管理动作,不是设置最大保留数量的配置方式;执行前应确认确实不再需要当前排查证据。

最后留一张速查表

目标使用方式关键理解
先看最近记录SLOWLOG GET 10默认思路是小窗口读取
查看当前条数SLOWLOG LEN只反映容器当前库存
读完当前库存SLOWLOG GET -1不会扩大容量
控制最多保留几条CONFIG SET slowlog-max-len N影响后续淘汰边界
清除当前记录SLOWLOG RESET这是清空,不是调容量

如果只记一句话,就是:GET 的数字是“这次读多少”,LEN 是“现在有多少”,slowlog-max-len 是“最多留多少”。把三个概念分开后,Redis SLOWLOG 的读取和容量控制就不会再互相误导。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
VS Code 工作区信任提示怎样选择可信范围VS Code 工作区信任提示怎样选择可信范围
上一篇
VS Code 工作区信任提示怎样选择可信范围
Docker Desktop 怎样查看容器实时 CPU 与内存用量
下一篇
Docker Desktop 怎样查看容器实时 CPU 与内存用量
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    984次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    990次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1111次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1080次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    925次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码