Files
2026-10-20 21:19:44 +08:00

67 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 缓存架构设计) |