Redis 慢查询分析与优化
Redis 慢查询分析与优化
参考书籍 : https://weread.qq.com/web/reader/d5432be0813ab98b6g0133f5kd8232f00235d82c8d161fb2
以下从配置参数、耗时细分、分析工具、优化策略四个维度深入解析 Redis 慢查询问题,结合实战调优建议,帮助开发者精准定位并优化性能瓶颈。
一、慢查询核心配置参数

Redis 慢查询功能通过两个关键参数控制,直接影响日志记录范围和存储容量:
-
slowlog-log-slower-than-
功能:设定命令执行时间的阈值(单位:微秒),超过此值的命令会被记录。
-
默认值:10000 微秒(10 毫秒),建议高并发场景调整为 1000 微秒(1 毫秒) 。
-
特殊值:
-
0:记录所有命令(调试用)。 - 负值:禁用慢查询日志。
-
-
-
slowlog-max-len- 功能:定义慢查询日志列表的最大长度(先进先出队列)。
- 默认值:128 条,生产环境建议调至 1000 条以上,避免关键日志被覆盖。
配置示例:
# 动态设置(临时生效)
CONFIG SET slowlog-log-slower-than 1000
CONFIG SET slowlog-max-len 1000 # 持久化到配置文件(需重启)
slowlog-log-slower-than 1000
slowlog-max-len 1000
二、耗时细分与瓶颈定位
Redis 命令执行全流程耗时可拆分为以下阶段:
-
网络传输(客户端到服务端):
- 网络延迟或丢包可能导致客户端感知的耗时增加,但不记录在慢查询日志中。
- 排查工具:
ping、traceroute 或监控工具(如 Prometheus)。
-
命令排队(Redis 内部队列):
- 单线程架构下,若并发请求过高,命令需排队等待执行。
- 排队时间不纳入慢查询统计,但可能导致客户端超时。
-
命令执行(核心耗时):
- 实际执行命令的耗时,由慢查询日志的
duration 字段记录(单位:微秒)。 - 高复杂度命令(如
KEYS、SORT)或 BigKey 操作是主要瓶颈。
- 实际执行命令的耗时,由慢查询日志的
-
结果返回(服务端到客户端):
- 网络传输时间同样不计入慢查询日志,但可能影响客户端体验。
三、慢查询分析工具
-
内置命令:
-
**
SLOWLOG GET [n]**:获取最近 n 条慢查询日志,含时间戳、耗时、具体命令。
127.0.0.1:6379> SLOWLOG GET 2 1) 1) (integer) 12345 # 日志ID 2) (integer) 1680000000 # 时间戳 3) (integer) 15000 # 耗时(微秒) 4) 1) "SORT" # 命令及参数 2) "mylist" -
**
SLOWLOG LEN**:查看当前慢查询日志数量。 -
**
SLOWLOG RESET**:清空日志列表。
-
-
监控工具:
-
**
INFO COMMANDSTATS**:统计所有命令的执行次数和总耗时,定位高频耗时命令。
参数介绍:
截图中每一项均以
cmdstat_<命令名> 开头,代表对应 Redis 命令的执行统计信息,各参数含义如下:参数名 含义 calls该命令的总执行次数。 usec该命令所有执行耗时的总和(单位:微秒,μs)。 usec_per_call该命令的平均执行时间(单位:微秒,μs),即 usec ÷ calls。 rejected_calls该命令被拒绝执行的次数(如权限不足、命令被禁用等情况)。 failed_calls该命令执行过程中失败的次数(如参数错误、执行逻辑异常等)。 以
cmdstat_ttl:calls=304,usec=3064,usec_per_call=10.08,rejected_calls=1,failed_calls=0 为例:-
TTL 命令共执行304 次,总耗时3064 微秒,平均每次耗时10.08 微秒,被拒绝执行1 次,执行失败0 次。
其他项(如
cmdstat_auth、cmdstat_set 等)均遵循此格式,分别对应各自命令的统计数据,可据此分析命令的执行频率、性能及异常情况。 -
-
**
MONITOR**:实时捕获所有命令(慎用,可能引发性能问题)。 -
第三方工具:Prometheus + Grafana 实现可视化监控。 后续研究
-
四、优化策略与实战建议
-
规避高复杂度命令:
-
替代方案:
- 用
SCAN 代替KEYS 遍历键。 - 客户端实现排序,避免
SORT 命令处理大数据集。
- 用
-
分页处理:对大型集合使用
LRANGE 分批次获取数据。
-
-
BigKey 治理:
-
拆分存储:将大 Hash/List 拆分为多个子键(如
user:1001:logs_part1)。 -
渐进式删除:通过 Lua 脚本分批次删除 BigKey,避免阻塞。
-- 分批次删除大列表 local key = KEYS[1] for i = 1, 1000 do redis.call("LPOP", key) end
-
-
配置调优:
- 内存管理:设置
maxmemory 和淘汰策略(如allkeys-lru)。 - 集群分片:使用 Redis Cluster 分散负载,缓解单节点压力。
- 内存管理:设置
五、调优最佳实践
-
定期日志分析:
- 每日检查慢查询日志,识别高频耗时命令。
- 结合
INFO COMMANDSTATS 验证优化效果。
-
阈值动态调整:
- 业务高峰期临时降低
slowlog-log-slower-than(如 500 微秒),捕捉潜在问题。
- 业务高峰期临时降低
-
日志持久化:
- 定期将慢查询日志导出到外部存储(如 Elasticsearch),便于长期分析。
总结
通过合理配置 slowlog-log-slower-than 和 slowlog-max-len,结合 SLOWLOG GET 和监控工具,可精准定位 Redis 性能瓶颈。优化核心在于规避高复杂度命令、治理 BigKey、动态调整配置及利用集群技术。定期分析日志与监控数据,是保障 Redis 高性能运行的关键。
相关文章:
Redis 慢查询分析与优化
Redis 慢查询分析与优化 参考书籍 : https://weread.qq.com/web/reader/d5432be0813ab98b6g0133f5kd8232f00235d82c8d161fb2 以下从配置参数、耗时细分、分析工具、优化策略四个维度深入解析 Redis 慢查询问题,结合实战调优建议,帮助开发者…...
使用达梦官方管理工具SQLark快速生成数据库ER图并导出
在数据库设计与开发中,实体-关系图(ER 图)作为数据建模的核心工具,能够直观呈现表结构、字段属性及表间关系,是团队沟通和文档维护的重要工具。然而,许多开发者在实际工作中常面临一个痛点:手动…...
鸿蒙NEXT开发定位工具类 (WGS-84坐标系)(ArkTs)
import geoLocationManager from ohos.geoLocationManager; import { BusinessError, Callback } from ohos.base; import { LogUtil } from ./LogUtil; import { PermissionUtil } from ./PermissionUtil; import { map, mapCommon } from kit.MapKit; /*** 定位工具类 (WGS-8…...
模型 替罪羊效应
系列文章分享模型,了解更多👉 模型_思维模型目录。转嫁罪责于无辜,维系群体控制与稳定 1 替罪羊效应的应用 1.1 多品牌危机中的行业“背锅侠” 行业背景:食品行业爆发大规模安全危机,多家企业卷入某类食品重金属超标…...
TapData × 梦加速计划 | 与 AI 共舞,TapData 携 AI Ready 实时数据平台亮相加速营,企业数据基础设施现代化
在实时跃动的数据节拍中,TapData 与 AI 共舞,踏出智能未来的新一步。 4月10日,由前海产业发展集团、深圳市前海梦工场、斑马星球科创加速平台等联合发起的「梦加速计划下一位独角兽营」正式启航。 本次加速营以“打造下一位独角兽企业”为目…...
15.电感特性在EMC设计中的运用
电感特性在EMC设计中的运用 1. 共模电感与差模电感的差异2. 电感的高频等效特性3. 电感在EMC设计中的使用注意事项3.1 LC滤波计算3.2 并联型多级浪涌防护的电感退耦 1. 共模电感…...
uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法
目录 前言:升级项目的两种方式步骤一、新建项目 【选择-默认模版】二、修改-pages.json三、补充-缺少的文件四、修改-Main.js按照 [官方文档-vue2升级vue3迁移指南](https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html) 修改 五、升级-uni-ui扩展组件的…...
数据重构如何兼顾效率与性能稳定?zStorage 全闪存分布式存储的技术实践与实测数据
点击蓝字 关注我们 zStorage 作为数据库场景下的全闪存分布式存储,除了性能要好,更重要的是要在各种情况下都能保持“稳定”的好。一个高并发的交易型业务数据库,如果出现轻微的IO抖动,就可能造成数据库并发事务提交的排队&#x…...
linux下内存地址数学运算
如下代码计算地址并16字节对齐: char* buffer (char*)malloc(a3 0x1000);unsigned long long tmp (((unsigned long long)buffer 0x10) & 0xffffffffffffff00);char* buf (char*)tmp;假如把地址当作整数,加减程序运算,直接转换是不行…...
A2A + MCP:构建实用人工智能系统的超强组合
构建真正有效的连接型人工智能系统的挑战 如果你正在构建人工智能应用,这种情况可能听起来很熟悉: 你需要特定的人工智能能力来解决业务问题。你找到了完成每个单独任务的出色工具。但把所有东西连接在一起却占据了大部分开发时间,还创建了…...
力扣每日打卡17 49. 字母异位词分组 (中等)
力扣 49. 字母异位词分组 中等 前言一、题目内容二、解题方法1. 哈希函数2.官方题解2.1 前言2.2 方法一:排序2.2 方法二:计数 前言 这是刷算法题的第十七天,用到的语言是JS 题目:力扣 49. 字母异位词分组 (中等) 一、题目内容 给…...
Word处理控件Spire.Doc系列教程:C# 为 Word 文档设置背景颜色或背景图片
在 Word 文档中,白色是默认的背景设置。一般情况下,简洁的白色背景足以满足绝大多数场景的使用需求。但是,如果您需要创建简历、宣传册或其他创意文档,设置独特的背景颜色或图片能够极大地增强文档的视觉冲击力。本文将演示如何使…...
ecovadis评级范围,如何拿到ecovadis评级高分
EcoVadis评级范围及高分策略详解 一、EcoVadis评级范围(四大核心主题) EcoVadis从以下4大维度对企业进行评分,权重因行业而异(如制造业更侧重环境,IT业更关注商业道德): 评估维度具体评估内容…...
掌握 Altium Designer:轻松定制“交换器件”工具栏
在PCB设计过程中,快速交换器件(如电阻、电容、IC等)是提高效率的关键。Altium Designer提供了灵活的工具栏定制功能,让用户可以创建专属的"交换器件"工具栏,将常用操作集中管理,减少菜单切换时间…...
JavaScript的JSON处理Map的弊端
直接使用 Map 会遇到的问题及解决方案 直接使用 Map 会导致数据丢失,因为 JSON.stringify 无法序列化 Map。以下是详细分析及解决方法: 问题复现 // 示例代码 const myMap new Map(); myMap.set(user1, { name: Alice }); myMap.set(user2, { name: B…...
【C++ Qt】信号和槽(内配思维导图 图文并茂 通俗易懂)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本章是Qt中的第三章,也是我们理解Qt中必备的点 信号槽,它本质由信号和槽两个来实现,其中将细致的讲述如何自定义信号…...
突破AI检测边界:对抗技术与学术伦理的终极博弈
随着GPT-4、Claude等大模型的文本生成能力突破人类写作水平,AI检测工具与对抗技术的博弈已进入白热化阶段。本文深入解析基于对抗训练的文本风格混淆网络如何突破GPTZero最新防御体系,探讨OpenAI多模态内容溯源系统引发的技术升级,并针对学术…...
从零开始构建微博爬虫:实现自动获取并保存微博内容
从零开始构建微博爬虫:实现自动获取并保存微博内容 前言 在信息爆炸的时代,社交媒体平台已经成为信息传播的重要渠道,其中微博作为中国最大的社交媒体平台之一,包含了大量有价值的信息和数据。对于研究人员、数据分析师或者只是…...
Git -> Git 所有提交阶段的回滚操作
已经修改但没有暂存的回滚 修改状态单个文件所有文件说明已修改未暂存git checkout -- 文件路径git checkout -- .丢弃工作区修改 已经暂存但没有提交的回滚 修改状态单个文件所有文件说明已暂存未提交git reset HEAD 文件路径 -> git checkout -- 文件路径git reset HEA…...
三餐四季、灯火阑珊
2025年4月22日,15~28℃,挺好的 待办: 教学技能大赛教案(2025年4月24日,校赛,小组合作,其他成员给力,暂不影响校赛进度,搁置) 教学技能大赛PPT(202…...
【Java面试笔记:基础】8.对比Vector、ArrayList、LinkedList有何区别?
在Java中,Vector、ArrayList和LinkedList均实现了List接口,但它们在线程安全、数据结构、性能特性及应用场景上存在显著差异。 1. Vector、ArrayList 和 LinkedList 的区别 Vector: 线程安全:Vector 是线程安全的动态数组&#…...
麒麟V10安装MySQL8.4
1、下载安装包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解压 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安装MySQL 3.1、卸载mariadb rpm -qa | grep mariadb rpm -e m…...
基于javaweb的SSM+Maven教材管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
C语言教程(十二):C 语言数组详解
一、引言数组的基本概念 数组是一组具有相同数据类型的元素的集合,这些元素在内存中连续存储。通过一个统一的数组名和下标来访问数组中的每个元素。使用数组可以方便地处理大量相同类型的数据,避免为每个数据单独定义变量。 二、一维数组 2.1 数组的…...
osxcross 搭建 macOS 交叉编译环境
1. osxcross 搭建 macOS 交叉编译环境 1. osxcross 搭建 macOS 交叉编译环境 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件编译及其他环境编译1.6. 打包成 docker 镜像1.7. 使用 docker 编译 …...
Zookeeper 概述
Zookeeper 概述 Zookeeper 概述与使用指南什么是Zookeeper?Zookeeper的主要作用使用Zookeeper的框架典型使用场景1. 配置管理2. 分布式锁3. 服务注册与发现 Zookeeper的缺陷与其他协调服务的比较实际案例:Kafka使用Zookeeper最佳实践 Zookeeper 概述与使…...
智能座舱测试内容与步骤
智能座舱的测试步骤通常包括以下环节: 1.测试环境搭建与准备 • 硬件需求分析:准备测试车辆、服务器与工作站、网络设备以及传感器和执行器模拟器等硬件设备。 • 软件需求分析:选择测试管理软件、自动化测试工具、模拟软件和开发调试工具等。…...
NineData 与飞书深度集成,企业级数据管理审批流程全面自动化
NineData 正式推出与飞书审批系统的深度集成功能,企业用户在 NineData 平台发起的审批工单,将自动推送至审批人的飞书中,审批人可以直接在飞书进行审批并通过/拒绝。该功能实现跨系统协作,带来巨大的审批效率提升,为各…...
mockMvc构建web单元测试学习笔记
web应用本来需要依靠tomcat这个环境运行 现在用mockMvc是为了模拟这个web环境,简化测试 什么是mock(模拟) 模拟对象---mock object是以可控方式模拟真实对象行为的假对象,通过模拟输入数据,验证程序达到预期结果 为什么使用mock对象 因为…...
【白雪讲堂】[特殊字符]内容战略地图|GEO优化框架下的内容全景布局
📍内容战略地图|GEO优化框架下的内容全景布局 1️⃣ 顶层目标:GEO优化战略 目标关键词: 被AI理解(AEO) 被AI优先推荐(GEO) 在关键场景中被AI复读引用 2️⃣ 三大引擎逻辑&#x…...
