6.18 缓存监控
概述
缓存监控是无表模块:解析 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 缓存架构设计) |