redis--主从还是集群,内存

一、Redis 内存缓冲区

Redis 内存分为三块:数据内存、进程内存、缓冲区内存;缓冲区内存波动大,BigKey 容易引发内存溢出。

1. 复制缓冲区 repl_backlog_buf

  • 作用:主从增量同步时,保存主节点写命令,从节点断线重连后,从这里补发命令,避免全量同步。
  • 配置:repl-backlog-size,默认 1MB
  • 风险:设置过小,从库断线后缓冲区命令被覆盖,触发频繁全量复制,拖垮主库性能。

2. AOF 缓冲区

  • 作用:AOF 刷盘前的内存缓存,AOF rewrite 过程也会使用。
  • 特点:不能设置容量上限,命令持续写入会不断占用内存。

3. 客户端缓冲区(输入 + 输出)

  1. 输入缓冲区 :接收客户端发来的命令,最大 1G,不可配置;大命令会撑爆输入缓冲区。
  2. 输出缓冲区 :Redis 返回数据给客户端的缓冲区,可配置

配置命令:client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds> | 参数 | 含义 | | ---- | ---- | | class | 客户端类型:normal 普通客户端 /replica 主从副本 /pubsub 订阅客户端 | | hard limit | 硬上限,缓冲区一旦超过该值,立刻断开客户端 | | soft limit + soft seconds | 软限制:缓冲区超过 soft limit,持续 soft seconds 秒之后,断开客户端 | 默认配置

复制代码
client-output-buffer-limit normal 0 0 0      # 普通客户端,0代表关闭限制,不断开
client-output-buffer-limit replica 256mb 64mb 60   # 副本:硬256M,软64M,持续60s断开
client-output-buffer-limit pubsub 32mb 8mb 60      # 订阅:硬32M,软8M,持续60s断开

二、内存查看命令

  • info memory:查看内存整体指标(used_memory、used_memory_rss、峰值内存等)
  • memory stats:查看内存分项统计,如复制缓冲区、aof 缓冲区、客户端内存占用。

三、Redis Cluster 集群六大问题

核心结论:主从 Sentinel 集群,单机就能万级 QPS,业务能满足就尽量不用 Redis Cluster 分片集群,集群引入很多额外问题。

① 集群完整性问题

  • 默认配置:cluster-require-full-coverage yes,任意一个哈希插槽 slot 不可用,整个集群停止对外服务。
  • 优化:设置 cluster-require-full-coverage no,未故障的插槽可以继续对外提供服务,提升可用性。

② 集群带宽问题

集群节点之间持续互相 PING,PING 包携带插槽信息、集群状态;节点越多,PING 包体积越大,占用大量内网带宽。 解决办法:

  1. 不要搭建超大集群,节点不宜过多;业务量大就拆分成多个独立小集群,不要单集群无限扩容。
  2. 单台物理机不要部署过多 Redis 实例,避免争抢带宽。
  3. 合理调整cluster-node-timeout。

③ 数据倾斜问题

  • 哈希槽分配不均、大 key 全部落在同一个 slot,导致部分节点内存 / 压力远高于其他节点。

④ 客户端性能问题

客户端需要维护集群路由表、MOVED/ASK 重定向,增加客户端开销;需要智能客户端。

⑤ 命令兼容性问题

多 key 命令(mget、mset),要求所有 key 落在同一个 slot,跨槽多 key 命令直接报错,无法执行。

⑥ Lua 脚本 & 事务问题

Lua 脚本、事务,默认要求脚本内所有 key 必须在同一个哈希槽,跨 slot 会执行失败。

四、面试简答版(口述精简)

Redis 缓冲区分复制缓冲区、AOF 缓冲区、客户端缓冲区。复制缓冲区用于主从增量同步,默认 1M,太小会频繁全量同步。客户端输出缓冲区有软硬两道阈值,hard 超了直接断连,soft 是持续一段时间超限再断。

Redis Cluster 分片集群有六大缺陷:集群完整性(一个 slot 挂了整集群不可用,改参数部分可用)、节点间 PING 包带来带宽开销、数据倾斜、客户端路由开销、跨 slot 多 key 命令不支持、Lua 脚本事务多 key 限制。

相关推荐
码农小河662 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
风若飞4 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Nuanyt4 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
黑马程序员毕设5 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
SL_staff5 小时前
从文档工具到知识中枢:基于JVS数字底座构建企业级统一内容管理平台的技术实践
java·开源·全栈
SL_staff5 小时前
从‘连得上’到‘管得好’:JVS-IOT双引擎驱动设备运维闭环
java·物联网·产品
w_zero_one7 小时前
递归算法(一)
java·开发语言·算法
SL_staff8 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华8 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊8 小时前
LeetCode1881~1990题目解析
java·leetcode