Redis如何监控系统QPS的变化趋势

冬静大大_6077

冬静大大_6077

2026-03-29

457人浏览

原创

最稳的qps监控起点是info stats中的total_commands_processed,通过多次采样差值计算并取中位数或滑动平均,结合instantaneous_ops_per_sec、keyspace_hits/misses等指标交叉分析异常原因。

redis如何监控系统qps的变化趋势

用 INFO stats 抓取 total_commands_processed 是最稳的起点

Redis 本身不直接暴露“QPS”这个值,但 total_commands_processed 是累计命令数,只要做差值除以时间间隔,就是真实 QPS。它比监听 MONITOR 更轻量、比客户端埋点更客观,且不受网络抖动或客户端丢包影响。

常见错误是只采样一次就报数——比如睡 1 秒后算差值,但 Redis 命令可能集中在某几十毫秒爆发,单次采样会严重失真。正确做法是至少连续采样 3–5 次,每次间隔 1 秒,再取中位数或滑动窗口平均。

  • redis-cli info stats | grep total_commands_processed 可快速验证当前值
  • 脚本里别用 time.sleep(1) 后立刻读,要加小偏移(如 time.sleep(0.98)),避免刚好卡在秒级统计刷新边界上造成跳变
  • 注意:该指标包含所有命令(INFO、CLIENT LIST 等管理命令也算),高频率运维操作会抬高基线,生产环境建议过滤掉非业务命令类型(需结合 COMMANDSTATS 分析)

用 Prometheus + Redis Exporter 实现趋势可视化

手动轮询 INFO 只能看瞬时值,要观察“变化趋势”,必须把数据存下来画图。Prometheus 是目前最通用的选择,而 redis_exporter 负责把 Redis 的 INFO 输出翻译成 Prometheus 能抓的指标格式。

容易踩的坑是 exporter 启动后没配对 target,或者 Redis 开了认证但 exporter 没传密码,结果 metrics 页面返回空或 401 —— 这时 curl http://localhost:9121/metrics 会直接暴露问题。

  • 启动 exporter 时务必加 --redis.password=xxx(如有认证)和 --redis.addr=redis://localhost:6379
  • Prometheus 配置里 scrape_interval 建议设为 10s,太密(如 1s)会给 Redis 带来额外 INFO 压力;太疏(如 60s)会丢失波峰细节
  • Grafana 中用 rate(redis_commands_total[5m]) 计算 QPS,别用 increase() 直接除时间——它对断点不鲁棒,趋势图容易突变

警惕缓存穿透/热 key 导致的 QPS 假性飙升

监控到 QPS 突增,第一反应不该是扩容,而是确认是不是异常流量。比如某个 key 失效瞬间大量请求击穿缓存,全部打到 DB 再回写 Redis,这时 Redis 的 QPS 会陡升,但实际是下游压力转移过来的假信号。

仅看 total_commands_processed 无法区分正常业务增长和异常穿透,必须联动其他指标交叉判断:

  • 查 redis-cli --stat 或 INFO stats 中的 instantaneous_ops_per_sec,它反映实时指令速率,若远高于 rate(total_commands_processed),说明有短时脉冲
  • 对比 keyspace_hits 和 keyspace_misses,命中率骤降到 85% 以下大概率是穿透或 key 批量失效
  • 用 redis-cli --hotkeys(Redis 4.0+)或 SLOWLOG GET 10 查是否有单个命令耗时 >50ms,热 key 读通常伴随高延迟

Python 脚本实现带缓冲的 QPS 采集(附防抖逻辑)

不是所有环境都能上 Prometheus,有时一个轻量脚本就能满足短期趋势分析需求。关键是要加环形缓冲区,避免把每秒原始值全记下来撑爆内存,同时支持滚动计算最近 N 秒的平滑值。

下面这段代码跑起来后,每秒输出的是过去 5 秒的加权平均 QPS,比单点值抗噪能力强得多:

import redis
import time
from collections import deque
<p>client = redis.StrictRedis(host="localhost", port=6379, decode_responses=True)
window = deque(maxlen=5)  # 存最近5次的 commands_processed 值</p><p>while True:
try:
curr = int(client.info("stats")["total_commands_processed"])
window.append(curr)
if len(window) >= 2:
qps = (window[-1] - window[0]) / (len(window) - 1)
print(f"QPS_5s_avg: {qps:.1f}")
except Exception as e:
print(f"err: {e}")
time.sleep(1)</p>

注意:别用 time.time() 做时间戳对齐,sleep 不精确;也别把 window 设太大(比如 60),否则冷启动后前几十秒数据全是 0,趋势图开头会塌陷。

真正难的从来不是“怎么画出一条线”,而是当这条线突然翘起时,你手边有没有 keyspace_misses、used_memory_peak_human、latest_fork_usec 这几个指标一起看——它们不说话,但合起来能告诉你,到底是用户变多了,还是 Redis 自己快扛不住了。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

2023.06.14

3663

6

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

2023.10.30

835

4

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4569

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4135

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7732

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7702

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习