容量估算:从单键均重出发
实用的估算方法分三步:先按数据类型分层抽样,用 MEMORY USAGE 测出单键平均开销(已含键名、结构与分配器的固定开销),乘以预估键数得到数据区规模;再叠加连接缓冲、复制实例、持久化 fork 的额外占用;最后留出峰值余量。估算只用于量级判断与预算,不是精确承诺。上线之后要用实测数据持续校准,每周对比一次,逐步用真实值替换模型。
基本信息
| 测量命令 | MEMORY USAGE key [SAMPLES n] |
|---|---|
| 嵌套采样 | 默认对嵌套元素采样 5 个 |
| 全量测量 | SAMPLES 0 表示精确计算,耗时更长 |
| 键数来源 | DBSIZE 或 INFO keyspace |
| 整体视图 | MEMORY STATS |
| 额外余量 | 复制缓冲、客户端缓冲、fork 需求 |
| 校准节奏 | 上线后按周对比实测 |
典型使用场景
- 新业务上线前估算需要多大内存与几台实例
- 为内存预算与采购提供量级依据
- 评估把某类数据从 Redis 迁走的节省幅度
- 校验现有实例是否还有扩容余量
- 解释同一份数据在不同业务形态下内存差异大的原因
- 为分片方案选择合理的分片数与键分布策略
抽样与测量
抽样与测量
redis-cli MEMORY USAGE sample:key # 单键开销(含采样估算)
redis-cli MEMORY USAGE sample:key SAMPLES 0 # 精确测量,开销更大
redis-cli DBSIZE # 当前键总数
redis-cli INFO keyspace # 各库键数与过期键数
redis-cli MEMORY STATS | head -30 # 结构化内存分布
redis-cli INFO clients # 连接缓冲量级估算要素清单
| 要素 | 取数方式 | 容易漏算的部分 |
|---|---|---|
| 单键均重 | 分层抽样测量 | 只按最大键估算 |
| 键总量 | DBSIZE | 忽略未来增长 |
| 客户端缓冲 | INFO clients | 慢消费者与订阅场景 |
| 复制开销 | 副本数量与积压缓冲 | 全量同步期间的内存 |
| 持久化峰值 | fork 期间的额外占用 | 写时复制未计入 |
估算的用途是量级判断与预算,不是精确承诺;上线后的实测校准比初始模型更有价值。
按样本库的键分布去估算生产库,误差会被放大:抽样要覆盖真实业务的多种数据类型与取值大小。