*Redis MEMORY STATS 命令

MEMORY STATS 返回 Redis 服务器的详细内存使用统计信息,按类别列出各项内存指标。


*语法

MEMORY STATS

*参数说明

无参数。


*返回值

  • Array:键值对数组,包含各项内存统计指标
  • 常见指标包括:peak.allocatedtotal.allocatedstartup.allocatedreplication.backlogclients.slavesclients.normalaof.bufferdb.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.allocatedINFO 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 段落,包含该数据库的哈希表和过期键开销。