*Redis MEMORY STATS 命令
MEMORY STATS 返回 Redis 服务器的详细内存使用统计信息,按类别列出各项内存指标。
*语法
MEMORY STATS
*参数说明
无参数。
*返回值
- Array:键值对数组,包含各项内存统计指标
- 常见指标包括:
peak.allocated、total.allocated、startup.allocated、replication.backlog、clients.slaves、clients.normal、aof.buffer、db.0(各数据库开销)等
*时间复杂度
O(1)
*
*示例
> MEMORY STATS
1) "peak.allocated"
2) (integer) 1048576
3) "total.allocated"
4) (integer) 524288
5) "startup.allocated"
6) (integer) 368640
7) "replication.backlog"
8) (integer) 0
9) "clients.slaves"
10) (integer) 0
11) "clients.normal"
12) (integer) 496
13) "aof.buffer"
14) (integer) 0
15) "lua.caches"
16) (integer) 0
17) "db.0"
18) 1) "overhead.hashtable.main"
2) (integer) 488
3) "overhead.hashtable.expires"
4) (integer) 32
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 传入了额外参数 | 不需要任何参数 |
*最佳实践
- 建立内存监控基线,定期对比 MEMORY STATS 输出
peak.allocated可用于评估内存峰值需求total.allocated与 INFO memory 的 used_memory 对应- 各数据库段(db.N)可分析不同 DB 的内存分布
- 脚本解析时注意键值对格式,值可能是嵌套数组
*FAQ
Q1: MEMORY STATS 和 INFO memory 有什么区别? A: MEMORY STATS 更详细且结构化,包含 per-db 统计;INFO memory 是汇总文本。
Q2: peak.allocated 会重置吗? A: 不会自动重置,除非重启服务器或使用 CONFIG RESETSTAT(部分重置)。
Q3: 为什么 total.allocated 比实际数据大? A: 包含 Redis 自身结构开销、哈希表、客户端缓冲区等,不只是 value 大小。
Q4: 如何只看某个数据库的内存?
A: 解析输出中的 db.N 段落,包含该数据库的哈希表和过期键开销。