maxmemory 是什么
maxmemory 用字节口径设置实例可用的数据内存上限,支持 100mb、1gb 这类可读写法(1024 进位)。它约束的是 Redis 自己记账的内存使用量,不含系统上其他进程;留 0 表示不限制、由物理内存兜底,生产上不建议这么跑,因为越界时会先触发系统换页或直接被内核杀掉。
基本信息
| 单位 | 字节,可用 kb / mb / gb 后缀,按 1024 进位 |
|---|---|
| 默认值 | 0,表示不限制 |
| 生效方式 | CONFIG SET 动态生效,或写入配置文件后重启生效 |
| 超限行为 | 由 maxmemory-policy 决定:淘汰键或直接返回错误 |
| 水位观测 | used_memory 与 maxmemory 的比值即当前水位 |
相关参数对照
| 参数 | 作用 | 注意 |
|---|---|---|
| maxmemory | 数据内存上限 | 必须低于系统可用内存,给其他进程留空间 |
| maxmemory-policy | 超限时的策略,如 noeviction 报错、allkeys-lru 淘汰任意键 | 缓存场景与被持久依赖数据的场景要分开配置 |
| maxmemory-samples | 近似 LRU 与 LFU 的采样数 | 只影响淘汰精度与 CPU 开销 |
| maxmemory-clients | 客户端输出缓冲的总量限制 | 不计入数据内存,但同样吃系统内存 |
| used_memory_rss | 进程实际驻留内存 | 与 used_memory 的差值反映碎片与运行时开销 |
设置与核对
设置与核对
redis-cli CONFIG SET maxmemory 2gb # 动态设定上限
redis-cli CONFIG GET maxmemory maxmemory-policy
redis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human|maxmemory_policy'
redis-cli CONFIG REWRITE # 把当前配置写回配置文件,需实例带配置文件启动
# 上限要给 fork 时的写时复制、内存碎片与系统进程留出余量典型使用场景
- 单机多实例部署:给每个实例划出明确的内存边界,避免互相挤占
- 缓存服务定容:按数据集大小与命中率预算设定上限,并配合淘汰策略
- 容量告警基线:以 used_memory 与 maxmemory 的比值设置水位告警
- 扩缩容前的评估:改动上限前先看当前实际用量与增长趋势
- 故障排查:内存告警时先确认上限是否被误改,再看碎片与客户端缓冲
从库的内存占用可能高于主库,客户端缓冲区与复制相关的结构都会额外占空间;主从两侧按同一条基线评估容易误判。
maxmemory-policy 设为 noeviction 时,达到上限后写命令直接返回内存错误而读仍可用;缓存场景若误配成 noeviction,会在流量高峰集中报错。