线上 Redis 慢查询,不一定就是命令本身慢
上周值班的时候监控突然弹出 Redis 慢查询告警慢查询日志里全是HGETALL单条耗时经常冲到 80ms 以上。第一反应又是经典问题大 Hash 别用 HGETALL这个知识点群里都说烂了。一开始我也是这么处理的准备把这几个 HGETALL 改成 HMGET 分批拉。先把慢日志捞出来看记下对应的 key去线上实例查一下这个 hash 的 field 数量。结果有点意外这个 hash 里面也就三十多个 field体量很小按理说不应该这么慢。这下就有点懵。key 不大不是超大哈希没有热 key 打爆的迹象Redis 集群负载看着也平稳CPU、内存、网络带宽都没到水位线。那为什么 HGETALL 会持续进慢查询我先把客户端侧的耗时和服务端耗时拆开看。Redis 的 slowlog 记录的是服务端执行命令的时间不包含网络往返、客户端排队。但这次服务端记录的耗时本身就偏高排除单纯网络抖动。接着看实例的命令分布发现这个节点上定时任务很多大量在执行EXPIRE、KEYS历史遗留正在清理、还有持续的 RDB 落盘。刚好告警的时间段触发了 RDB。RDB fork 的时候主进程本身是阻塞的吗不是fork 是写时复制。但 fork 一瞬间操作系统要拷贝页表这个瞬间会有短暂停顿。如果刚好在这个停顿窗口里执行命令这条命令的耗时就会被拉长打进慢日志。而且 RDB 持久化期间内存持续有写入写时复制不断复制内存页额外带来 CPU 开销所有命令的响应都会跟着变缓不只是 HGETALL。我去核对了慢查询产生的时间点和 RDB 开始时间基本对上了。找到根因之后临时方案是调整 RDB 的触发条件把自动持久化的时间窗口挪到业务低峰同时降低持久化频率。调整完同一批 HGETALL耗时直接掉到 1~3ms慢查询告警消停了。本来以为事情到此为止隔了两天同一个实例又冒出慢查询这次是普通的 GET。没有 RDB也没有 AOF 重写。顺着链路追到客户端。项目用的是 Java 的 Lettuce连接池配置比较保守连接数给得很小。业务高峰期大量请求排队抢连接。慢日志里的服务端耗时明明很低但是业务监控上报的 Redis 耗时很高。这种就属于客户端排队阻塞命令在客户端连接池里等着送到 Redis 的时候已经晚了。这种情况很有迷惑性Redis 服务端没压力慢日志看着干净但是业务侧超时、耗时飙升。这两个问题分开之后我慢慢整理出来平时排查 Redis 慢查询容易被忽略的几类情况很多人上来只盯着命令本身第一类持久化带来的抖动RDB fork 瞬间停顿、AOF rewrite 刷盘。AOF 如果是 always 刷盘每一条命令都 fsync高写入场景下很容易慢everysec 相对友好但系统负载高的时候后台线程 fsync 阻塞也会传导到主线程。很多开发只知道大 key、热 key忘了持久化本身就是抖动来源。第二类操作系统层面的限制内存交换 swap。一旦 Redis 内存被挤到 swap 分区本来内存访问的操作变成磁盘 IO随便一条简单 GET 都能几百毫秒。这个非常致命而且容易漏看很多监控面板默认不展示 swap 使用情况。现在我们这边 Redis 节点一律关闭 swap。第三类客户端侧排队、序列化耗时。比如连接池不够、命令堆积、客户端同步阻塞等待、对象序列化 / 反序列化耗时算到 Redis 调用耗时里。这部分不会出现在 Redis 的 slowlog只能埋点在调用前后打时间戳拆分。第四类集群内的迁移、槽位迁移。Redis Cluster 做 rebalance、slot 迁移的时候迁移中的 key 访问会被阻塞短时间内出现一批随机的慢命令。第五类本身命令确实不合适就是大家最熟悉的HGETALL、LRANGE 取超大范围、KEYS、FLUSHDB 这类。这个是最容易识别但有时候不是慢查询的真正元凶只是刚好在抖动期间被记录下来。再说说我自己现在排查的顺序不再上来就改命令先区分是 Redis slowlog 里面的服务端耗时高还是业务埋点看到的总耗时高看同一时间有没有持久化动作RDB / AOF rewrite检查节点 swap、CPU 上下文切换、磁盘 IO确认是不是 slot 迁移、主从同步在全量同步再看 key 本身大小分析命令是否合理最后看客户端连接池、并发排队情况。回到这次的 HGETALL虽然这次慢的根源是 RDB但我后面还是慢慢改掉了这一批 HGETALL。理由很简单它本身依然是不稳定的如果以后这个哈希慢慢膨胀或者实例再次抖动它会是最先爆出来的那个。优化命令和排查抖动两件事不冲突。Redis 主线程是单线程串行执行命令这个基础大家都懂。但很多人理解的 “慢命令”只是命令计算本身慢。实际上主线程任何形式的停顿都会让所有正在执行的命令一起遭殃。一条看起来无害的命令出现在慢日志它可能只是那个倒霉的、刚好撞上停顿的受害者而不是故障本身。

相关新闻

有效三角形个数:排序+双指针经典算法详解

有效三角形个数:排序+双指针经典算法详解

做算法题的时候有一种快乐是:题目本身只有一行描述,但背后藏着一整类优化思路。有效三角形个数就是这样——表面上是几何问题,实际上是排序和双指针的经典练兵场,也是我算法题解系列第五篇想重点讲透的题目。题目很直白&#xff1…

2026/10/15 19:04:55 阅读更多 →
SDSegmentedControl避坑指南:iOS 6/7兼容处理、IB集成技巧与现代化改造建议

SDSegmentedControl避坑指南:iOS 6/7兼容处理、IB集成技巧与现代化改造建议

【免费下载链接】SDSegmentedControl A drop-in remplacement for UISegmentedControl that mimic iOS 6 AppStore tab controls 项目地址: https://gitcode.com/gh_mirrors/sd/SDSegmentedControl 点击查看 免费下载 SDSegmentedControl 是一个可以直接替换系统 U…

2026/10/15 19:02:09 阅读更多 →
pg-jev性能深度解析:流式预读、20行批处理与持久连接如何让全表查询3.5秒完成

pg-jev性能深度解析:流式预读、20行批处理与持久连接如何让全表查询3.5秒完成

人工智能AI 应用大模型后端 【免费下载链接】pg-jev Ask your Postgres tables questions in plain language. A PostgreSQL extension powered by TypeSafes Jev. 项目地址: https://gitcode.com/gh_mirrors/pg/pg-jev 点击查看 免费下载 pg-jev 是一个 PostgreSQ…

2026/10/15 19:02:09 阅读更多 →

最新新闻

多个传感器如何协同作战?World2Agent多传感器组合与fanout传输完整指南

多个传感器如何协同作战?World2Agent多传感器组合与fanout传输完整指南

【免费下载链接】world2agent World2Agent(W2A) is an open protocol that standardizes how Al agents perceive the real world. 项目地址: https://gitcode.com/gh_mirrors/wo/world2agent 点击查看 免费下载 World2Agent(W2A)是一个开放…

2026/10/15 19:45:41 阅读更多 →
PASCAL-5i 小样本语义分割数据集复现要点与踩坑指南

PASCAL-5i 小样本语义分割数据集复现要点与踩坑指南

简介:Pascal-5i数据集是面向小样本学习研究的标准化数据集,源自PASCAL VOC,将20个类别划分为基础类与新类,支持5-way 1-shot和5-way 5-shot任务,适合需要验证原型网络、元学习或知识迁移方法的科研人员与算法工程师使用…

2026/10/15 19:45:41 阅读更多 →
c9-python-getting-started 系列:用 asyncio 与 async/await 编写 Python 异步操作

c9-python-getting-started 系列:用 asyncio 与 async/await 编写 Python 异步操作

示例工程教程 【免费下载链接】c9-python-getting-started Sample code for Channel 9 Python for Beginners course 项目地址: https://gitcode.com/gh_mirrors/c9/c9-python-getting-started 点击查看 免费下载 本指南围绕 more-python-for-beginners 课程中「As…

2026/10/15 19:45:41 阅读更多 →
高光谱数据加载实战:从HDF5到PyTorch DataLoader的完整路径

高光谱数据加载实战:从HDF5到PyTorch DataLoader的完整路径

简介:面向使用PyTorch框架处理高光谱图像的研究者,这份资源精准解决高光谱数据在深度学习训练中批量读取与预处理的效率问题。高光谱图像通常包含数百个光谱通道,数据量庞大,因此加载策略直接影响模型训练速度与稳定性。压缩包共七…

2026/10/15 19:45:41 阅读更多 →
昇腾910B/910C 多模态模型私有化部署实战:11 个模型 + Nginx 统一 API 网关

昇腾910B/910C 多模态模型私有化部署实战:11 个模型 + Nginx 统一 API 网关

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 19:45:41 阅读更多 →
协处理器系统集成实战:架构设计、接口实现与性能调优

协处理器系统集成实战:架构设计、接口实现与性能调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 19:44:39 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →