首页/数据/Redis 进阶速查/maxmemory-clients:客户端内存总量治理
内存与管理99 条

maxmemory-clients:客户端内存总量治理

maxmemory-clients 限制所有客户端连接缓冲(查询缓冲、输出缓冲)可用的内存比例或绝对值,超限时按用量驱逐客户端。

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

maxmemory-clients 是什么

maxmemory-clients 限制所有客户端连接用于缓冲的内存总量(查询缓冲与输出缓冲),可以用占 maxmemory 的百分比(如 5%)或绝对值(如 512mb)表达。超过上限时,Redis 挑用量最大的客户端断开,避免个别慢消费者把实例内存吃光。它需要显式配置才起作用,具体当前值用 CONFIG GET 确认。

基本信息

语法百分比形式如 5%,或绝对值形式如 512mb
统计对象客户端查询缓冲与输出缓冲
超限行为按用量从大到小驱逐客户端,被驱逐方看到连接断开
确认方式CONFIG GET maxmemory-clients
配套观测CLIENT LIST 中的 qbuf、omem 等缓冲字段

缓冲失控的常见场景

场景表现处理方向
慢消费者订阅或批量读取但处理不过来,输出缓冲堆积限制单次返回量,消费侧加滞后告警
大消息订阅Pub/Sub 单条消息过大,订阅者缓冲膨胀拆分频道,或改用流式结构承载
阻塞命令堆积查询缓冲随请求排队增长排查阻塞命令与批量管道写法
大结果集读取单次返回巨大,客户端侧长时间占用缓冲分页读取,或按需取字段

配额与观测

配额与观测
redis-cli CONFIG GET maxmemory-clients          # 当前客户端内存上限
redis-cli CONFIG SET maxmemory-clients 5%       # 按 maxmemory 的百分比限制
redis-cli CONFIG SET maxmemory-clients 512mb    # 或直接给绝对值
redis-cli CLIENT LIST | head -5                 # 单个连接的 qbuf、omem 等缓冲字段
redis-cli INFO clients | grep -E 'client_recent_max_(input|output)_buffer'

典型使用场景

  • 内存告警排查:数据集不大但总内存偏高时,检查连接缓冲这类非数据占用
  • 慢消费者治理:定位长期堆积输出缓冲的客户端
  • 压测验证:上线前确认正常峰值缓冲用量,再定阈值
  • 客户端健壮性:配合重连与重试设计,让被驱逐不至于变成业务报错
  • 容器化部署:为实例划出明确的非数据内存边界
客户端缓冲与数据集内存要分开看:内存告警时若数据集不大,优先排查连接缓冲、复制缓冲这类非数据占用,再谈扩容。
阈值过小会把正常读取较大结果的客户端一并驱逐,业务侧表现为连接被无缘无故断开;设置前用压测确认正常峰值的缓冲用量。

易错点

  • 阈值过小误伤正常的大结果读取客户端,业务侧出现难以解释的连接中断
  • 阈值过大等于没有兜底,慢消费者依然能把实例内存吃满
  • 被驱逐的客户端没有重连与重试设计,驱逐直接变成业务报错
  • 只配置上限不看 CLIENT LIST,定位不到是哪个客户端在堆积缓冲
  • 把客户端缓冲排除在容量规划之外,总内存水位与预算脱节

数据来源与参考

  • Redis 官方文档:maxmemory-clients 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌