内存由哪两块组成
Redis 的内存分成两大部分:数据集内存,也就是用户键值本身,以及非数据集开销,包括键空间结构、客户端输出缓冲、复制缓冲区、脚本与模块、连接对象等。排查内存之前先分清涨的是哪一块。数据集与总量同步上涨,通常是写入量在增长;数据集稳定而总量持续上涨,多半是开销项在累积。
基本信息
| 数据集口径 | 数据集相关的内存统计字段 |
|---|---|
| 开销口径 | 非数据集内存统计字段 |
| 关系 | 总量等于数据集加上开销 |
| 查看命令 | INFO memory 与内存统计命令 |
| 细分维度 | 客户端缓冲、复制缓冲、脚本、连接对象 |
典型使用场景
- 内存持续上涨需要先判断方向,再决定排查哪条线索
- 客户端连接数增加导致开销上升,评估连接池配置是否合理
- 复制缓冲区占用异常,排查从库数量与复制滞后
- 容量规划时按数据集与开销的比例推算实际所需内存
- 做内存优化前先量化各分项占比,避免凭感觉调整
拆解查看
拆解查看
redis-cli INFO memory | grep -E 'used_memory:|used_memory_dataset|used_memory_overhead'
redis-cli MEMORY STATS # 更细的分项统计
redis-cli INFO clients | grep -E 'connected_clients|client_recent_max_output_buffer'
redis-cli INFO replication | grep -E 'connected_slaves|slave0'
redis-cli INFO memory | grep used_memory_peak分项判读
| 分项 | 含义 | 上涨说明什么 |
|---|---|---|
| 数据集 | 用户键值本身的占用 | 写入量或键数量增加 |
| 键空间开销 | 键的元数据与字典结构 | 键数量增加,小键多时占比更明显 |
| 客户端缓冲 | 连接相关的读写缓冲 | 连接数或大结果集返回增多 |
| 复制缓冲 | 为主从复制暂存的命令 | 副本数量多或复制滞后 |
| 脚本与模块 | 执行引擎与扩展占用 | 存在常驻脚本或加载了模块 |
只看内存总量容易判断错方向,先拆成数据集与开销两块,排查范围会立刻缩小很多。
开销占比偏高时优先查客户端连接数与缓冲配置,这类问题通常可以通过调整连接使用方式缓解。