# 6.18 缓存监控 :::tip 概述 缓存监控是无表模块:解析 Redis INFO 返回内存、客户端、命中率、键空间等指标;内存降级时返回 mode=memory 标识。路由 GET /api/cache/info(登录即可)。 ::: ## 接口 ```text GET /api/cache/info 登录即可,log "缓存监控-查询信息" ``` ## 返回内容 ```text 内存降级(cache.UsingMemory()): → {mode:"memory", connected:false}(仅返回模式标识,无 INFO 指标) Redis 模式:依次 INFO server/memory/stats/clients/keyspace + DBSIZE, 解析(parseRedisInfo:# 注释行跳过,k:v 映射): version / uptime / usedMemory / usedMemoryPeak / maxMemory / fragRatio / connectedClients / expiredKeys / evictedKeys / totalCommands / totalConns / hits / misses / hitRate(hits/(hits+misses),两位小数)/ keys(DBSIZE)/ keySpace[](每 db 的 keys/expires) 任一 INFO 失败 → connected=false 返回已解析部分 ``` ## 关键指标解读 | 指标 | 健康参考 | 异常含义 | |------|---------|---------| | mode | redis(生产必须) | memory = 已降级,多实例共享能力全失效 | | hitRate | > 0.8 | 偏低 → 键 TTL 过短或缓存未命中业务路径 | | usedMemory | 远小于 maxMemory | 接近 maxmemory → 需扩内存或清理 | | fragRatio | < 1.5 | 偏高 → 内存碎片(考虑碎片整理) | | connectedClients | 稳定 | 持续增长 → 连接泄漏 | | expiredKeys / evictedKeys | 有自然过期 | evictedKeys 持续增长 → maxmemory 淘汰(容量不足) | ## 与整体架构的关系 ```text 缓存分层:进程内(dictTextCache 等)→ Redis(跨实例共享)→ 数据库(唯一真相) 本接口观测的是 Redis 层;进程内层不可远程观测(重启即清) 降级影响面(mode=memory 时): 限流计数 / 任务锁 / 在线用户 / JWT 黑名单 / 验证码 / 字典缓存 全部退化单机语义 ``` ## 运维用法 ```text 日常巡检:mode 必须为 redis(生产红线) 容量规划:usedMemory/maxMemory 趋势 + evictedKeys 增速 命中率治理:hitRate 持续偏低时排查 TTL 策略(见 4.8 缓存架构设计 TTL 原则) 连接治理:connectedClients 对照 redis maxActive(连接池配置) ``` ## 排障 | 症状 | 处理 | |------|------| | mode=memory | Redis 不可用——查地址/密码/网络;恢复后自动回 redis(运行期探测) | | connected=false 但 mode=redis | INFO 命令失败(权限/超时);返回已解析部分 | | hitRate=0 | 全部未命中——检查是否有业务直连 g.Redis 绕过 cache 门面 | | 键数量异常多 | redis-cli KEYS 'easygoadmin:*' 抽查;对照键全集(4.8 缓存架构设计) |