Sentinal Redis

Polar Sponsor
爱发电 赞助
.NET 9.0

监控Redis服务器健康状况、内存、性能及BullMQ队列。检查队列深度、失败任务,分析慢查询并诊断问题。

哨兵 Redis.

功能概述

哨兵 Redis.是一项面向实际任务的技能,主要用于Monitor Redis 服务器健康, BullMQ队列, 内存, 以及任何消息频道的性能;使用简单英语询问问题 —— 获得可操作的诊断。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Sentinal Redis

通过任意消息通道监控 Redis 服务器健康状态、BullMQ 队列、内存使用及性能表现。使用自然语言提问,即可获得可操作的诊断结果。

适用场景

✅ 在以下情况下使用该能力:

  • 用户询问 Redis 服务器健康状态、运行状态或基本信息
  • 用户希望检查内存使用情况或诊断 OOM(内存溢出)问题
  • 用户询问 BullMQ 队列长度、失败任务或卡住的 Worker
  • 用户希望检查慢查询或延迟问题
  • 用户询问 Redis 响应缓慢或无响应的原因
  • 用户提及队列积压、死信队列(dead letter queue)或任务失败
  • 用户希望快速获取 Redis 实例的健康概览

不适用场景

❌ 请勿在以下情况下使用该能力:

  • 用户需要管理 PostgreSQL、MySQL 或其他非 Redis 数据库
  • 用户需要管理 Kafka、RabbitMQ 或 SQS 队列(非 BullMQ)
  • 用户需要帮助编写使用 Redis 的应用程序代码
  • 用户希望从零开始搭建 Redis(请参考官方 Redis 文档)

安全规则

⚠️ 关键提示:本能力为只读(READ-ONLY)模式,无任何例外。

  • 禁止执行任何破坏性命令(如 FLUSHDB、FLUSHALL、DEL、UNLINK、SET、EXPIRE),即使用户明确要求。需解释原因,并建议用户手动执行。
  • 禁止修改 Redis 配置(如 CONFIG SET),应引导用户自行操作。
  • 禁止在输出中打印或暴露完整 REDIS_URL —— 其中可能包含密码。显示前必须对凭据进行掩码处理。
  • 如有疑虑,应先展示待执行命令,并请求用户确认后再执行。

连接方式

若已设置 REDIS_URL 环境变量,则所有命令均使用该 URL:

redis-cli -u "$REDIS_URL" 

若未设置 REDIS_URL,则默认连接本地实例:

redis-cli 

对于未通过 REDIS_URL 配置但启用了密码认证的实例:

redis-cli -h  -p  -a  

执行任何操作前,请始终先测试连通性:

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" ping

服务器健康状态

快速状态检查

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" ping

完整服务器信息

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info server

已连接客户端

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info clients

运行时长与版本信息

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info server | grep -E "redis_version|uptime_in_days|uptime_in_seconds|connected_clients"

内存分析

内存概览

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info memory

关键内存指标

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info memory | grep -E "used_memory_human|used_memory_peak_human|used_memory_rss_human|mem_fragmentation_ratio|maxmemory_human|maxmemory_policy"

内存医生(仅 Redis 4.0+ 支持)

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" memory doctor

指定 Key 的内存占用

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" memory usage 

查找大 Key(基于 scan,适用于生产环境)

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" --bigkeys

内存结果解读

  • mem_fragmentation_ratio > 1.5 → 内存碎片率过高,建议重启 Redis
  • mem_fragmentation_ratio < 1.0 → Redis 正在交换到磁盘,属严重问题
  • used_memory 接近 maxmemory → 将依据 maxmemory_policy 开始驱逐数据
  • memory doctor 返回 “Sam, I have no memory problems” → 当前无内存问题

慢查询与性能分析

查看慢日志

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" slowlog get 10

慢日志条目总数

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" slowlog len

当前慢日志阈值

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" config get slowlog-log-slower-than

延迟检测

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" --latency -c 10

延迟历史记录

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" --latency-history -i 1 -c 5

键空间统计

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info keyspace

命令调用统计(调用最频繁的命令)

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info commandstats

客户端监控

列出已连接客户端

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" client list

客户端数量与摘要

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" info clients | grep -E "connected_clients|blocked_clients|tracking_clients"

查找空闲客户端(idle > 300 秒)

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" client list | awk -F' ' '{for(i=1;i<=NF;i++) if($i ~ /^idle=/) print $0}' | grep -E 'idle=[3-9][0-9]{2,}|idle=[0-9]{4,}'

BullMQ 队列监控

BullMQ 使用 Redis 作为后端存储。队列键名遵循模式:bull::。

发现全部队列

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" scan 0 match "bull:*:meta" count 100

队列深度(各状态)

对于名为 的队列:

echo "=== Queue:  ==="
echo -n "Waiting: "; redis-cli -u "${REDIS_URL:-redis://localhost:6379}" llen "bull::wait"
echo -n "Active: "; redis-cli -u "${REDIS_URL:-redis://localhost:6379}" llen "bull::active"
echo -n "Delayed: "; redis-cli -u "${REDIS_URL:-redis://localhost:6379}" zcard "bull::delayed"
echo -n "Failed: "; redis-cli -u "${REDIS_URL:-redis://localhost:6379}" zcard "bull::failed"
echo -n "Completed: "; redis-cli -u "${REDIS_URL:-redis://localhost:6379}" zcard "bull::completed"
echo -n "Paused: "; redis-cli -u "${REDIS_URL:-redis://localhost:6379}" llen "bull::paused"

检查失败任务

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" zrange "bull::failed" 0 9

获取任务详情

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" hgetall "bull::"

检查任务负载与错误信息

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" hmget "bull::" data failedReason stacktrace attemptsMade timestamp processedOn finishedOn

查找陈旧的活跃任务

长时间未更新的活跃任务可能存在卡住风险:

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" lrange "bull::active" 0 -1

随后对每个任务 ID 检查 processedOn 时间戳:

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" hmget "bull::" processedOn name

若 processedOn 超过 10 分钟且任务仍处于活跃状态,则可能已卡住。

检查队列 Worker(通过事件流)

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" xinfo groups "bull::events" 2>/dev/null || echo "No event stream found"

BullMQ 定期任务

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" zrange "bull::repeat" 0 -1

Key 检查

按模式查找 Key

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" scan 0 match "" count 100

Key 类型与 TTL

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" type 
redis-cli -u "${REDIS_URL:-redis://localhost:6379}" ttl 

Key 编码方式(用于评估内存效率)

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" object encoding 
redis-cli -u "${REDIS_URL:-redis://localhost:6379}" object idletime 

按前缀统计 Key 数量(适用于审计场景)

redis-cli -u "${REDIS_URL:-redis://localhost:6379}" eval "local count = 0; local cursor = '0'; repeat local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1], 'COUNT', 1000); cursor = result[1]; count = count + #result[2]; until cursor == '0'; return count" 0 "*"

诊断 —— 全面健康检查

运行健康检查脚本以获取综合概览:

bash scripts/redis-health.sh "${REDIS_URL:-redis://localhost:6379}"

该脚本输出内容包括:

  • 连通性状态
  • 服务器版本与运行时长
  • 内存使用量与碎片率
  • 已连接客户端数与阻塞客户端数
  • 慢查询数量
  • 全部 BullMQ 队列深度
  • 检测到的任何异常警告

故障排查决策树

Redis 响应缓慢

  1. 检查延迟:redis-cli --latency -c 10
  2. 若延迟 > 1ms → 检查慢日志:slowlog get 10
  3. 若慢日志中存在对大型集合执行的 KEYS/SMEMBERS/HGETALL → 建议改用对应 SCAN 变体
  4. 检查内存碎片率 → 若 > 1.5,建议重启 Redis
  5. 检查 connected_clients → 若 > 1000,需排查连接池配置
  6. 检查 blocked_clients → 若 > 0,需检查 BLPOP/BRPOP 消费者

Redis OOM / 内存占用过高

  1. 运行 info memory → 对比 used_memory 与 maxmemory
  2. 运行 --bigkeys → 查找最大 Key
  3. 检查 maxmemory_policy → 是否已启用驱逐策略?
  4. 运行 memory doctor → 遵循其建议
  5. 检查 Key 是否缺失 TTL:对大 Key 执行 scan 并逐一检查 ttl

BullMQ 任务卡住 / 无法处理

  1. 检查队列深度 → 是否大量任务堆积在 wait 状态?
  2. 检查 active 列表 → 是否存在长期处于活跃状态的任务?
  3. 检查陈旧活跃任务 → processedOn 时间戳是否过旧?
  4. 检查事件流 → 使用 xinfo groups 验证 Worker 是否已正确连接
  5. 检查 failed 集合 → 读取 failedReason 和 stacktrace
  6. 检查 Redis 连通性 → Worker 是否能正常访问 Redis?

BullMQ 失败率过高

  1. 获取近期失败任务:zrange bull::failed -10 -1
  2. 对每项任务读取 failedReason 和 stacktrace
  3. 按错误类型分组 → 是单一重复错误,还是多种错误混杂?
  4. 检查 attemptsMade → 是否已耗尽重试次数?
  5. 检查任务 data → 负载内容是否格式异常?

注意事项

  • 所有命令在未设置 REDIS_URL 时,默认使用 redis://localhost:6379
  • scan 命令适用于生产环境(非阻塞),而 keys 命令严禁在生产环境中使用
  • BullMQ 键名模式默认采用前缀 bull:;若使用了自定义前缀,请相应替换 bull:
  • 对于 Redis Cluster,请在 redis-cli 命令中添加 -c 参数
  • 对于 Redis Sentinel,请先连接 Sentinel 实例以自动发现主节点

相关专题

更多
Hyperf 高并发缓存与分布式系统应用
Hyperf 高并发缓存与分布式系统应用

讲解在协程模式下如何高效操作 Redis,实现高性能分布式锁、处理缓存击穿/雪崩问题,并提供基于 Hyperf 的分布式事务处理思路。

2026.05.19

348

15

Java缓存技术与Redis集成教程合集
Java缓存技术与Redis集成教程合集

系统讲解 Java 项目中缓存技术的选型与实践,涵盖本地缓存方案(HashMap 手动缓存/Guava Cache/Caffeine 高性能缓存)的使用与淘汰策略配置、Redis 数据结构(String/Hash/List/Set/ZSet)在缓存场景的应用、Jedis / Lettuce / Redisson 客户端选型、Spring Cache 注解(@Cacheable/@CachePut/@CacheEvict)的声明式缓存、缓

2026.05.15

402

34

Redis常用命令及详解
Redis常用命令及详解

本专题深入汇总并剖析了 Redis 生产环境中最具实战价值的常用命令,涵盖了从集群状态检测、内存精细化监控、主从同步故障排查到哨兵模式动态运维等关键技术。通过本专题的系统梳理,开发者与运维工程师能够精准掌握各类型 Redis 指令的底层逻辑与使用场景,从而构建起稳定、高效、可维护的 Redis 集群存储架构。

2026.04.23

226

20

Redis缓存击穿深度解析与解决方法
Redis缓存击穿深度解析与解决方法

本专题深入剖析 Redis 缓存击穿的核心成因,全面解读高并发场景下防止数据库崩溃的深度防护策略。内容系统涵盖了互斥锁(Mutex Lock)、双重检查锁(DCL)及分布式锁在解决热点数据过期难题中的应用实战,并深入对比了本地锁与分布式锁的架构优劣。通过本专题的学习,开发者能够掌握构建高可用缓存系统的精髓,有效保障生产环境下的数据持久性与高性能访问。

2026.04.23

155

19

Redis布隆过滤器使用教程
Redis布隆过滤器使用教程

本专题深度解析 Redis 布隆过滤器的核心机制与生产环境实战应用,涵盖了从基础原理、Bitmap 与多哈希函数拦截实现,到 RedisBloom 模块的安装与配置等关键知识点。专题详细探讨了如何利用布隆过滤器有效解决缓存穿透、缓存击穿等高并发场景下的数据治理难题,并深入分析了在 API 网关层面集成布隆过滤器的方案,帮助开发者构建起高效、精准的数据拦截与缓存防护体系。

2026.04.23

124

11

Redis哨兵模式常见问题与配置详解
Redis哨兵模式常见问题与配置详解

本专题深入解析 Redis 哨兵模式(Redis Sentinel)的高可用架构,系统梳理了从基础搭建到生产环境实战的全过程。内容涵盖哨兵监控频率优化、脑裂风险规避、数据一致性保障,以及针对不同业务场景下的参数深度调优。同时,专题提供了针对复杂网络环境与多机房部署的故障排查指南,旨在帮助架构师与开发者构建稳定、高效、可扩展的 Redis 高可用集群,有效解决生产环境中的监控抖动与服务中断难题。

2026.04.23

374

25

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

2026.02.13

270

16

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

3918

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

796

6

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习