首页/数据/Redis 进阶速查/maxmemory:内存上限的设定
内存与管理99 条

maxmemory:内存上限的设定

maxmemory 以字节为单位设置实例可用内存上限,支持 100mb、1gb 这类可读写法;留 0 表示不限制(64 位默认)。

Redis 进阶速查数据更新于 2026-10-13

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,会在流量高峰集中报错。

易错点

  • 把上限设成系统总内存,挤掉系统与其他进程,反而引发更严重的故障甚至进程被杀
  • 改了 maxmemory 却没确认 maxmemory-policy,超限后行为与预期完全相反
  • 只按数据量设上限,忽略碎片率、客户端输出缓冲与 fork 期间的写时复制开销
  • 主库与从库套用同一个数值,角色差异导致的额外占用被当成异常增长
  • 用 CONFIG SET 改了上限却没 CONFIG REWRITE 或写配置文件,重启后配置回退

数据来源与参考

  • Redis 官方文档:maxmemory 配置说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌