必须手动遍历各主节点执行INFO memory提取evicted_keys累计值,结合槽位分布计算单位槽位淘汰压力比值才能准确定位瓶颈点。
没有直接暴露“因淘汰受损最严重节点”的指标,必须靠聚合 + 槽位分布交叉比对才能定位真实瓶颈点。
如何准确抓取各节点的
累计值
Redis 集群每个主节点独立统计自己的
(被内存淘汰策略驱逐的 key 数),它不跨节点聚合,也不自动上报到集群视图。必须手动遍历所有主节点执行
并提取该字段:
先用
列出全部节点,过滤出 role=master 且 state=connected 的地址
对每个主节点逐个调用:
注意:
是累计值,不是速率;若需判断“当前压力”,应间隔固定时间(如 60s)两次采集做差值
某些旧版 Redis(如
之前)可能不返回该字段——需确认版本 ≥
且启用了淘汰策略(非
)
为什么只看
不够,必须结合槽位分布
高
只说明该节点内存压力大,但不等于它是“数据分布不均”的根源——有可能是它承载了更多热 key、更大 value、或更激进的淘汰策略配置。真正要判断“是否该迁移槽位”,得看:
该节点的
是否显著高于其他主节点(比如 >2 倍中位数)
它的实际内存使用率(
)是否逼近物理内存上限
它负责的哈希槽数量是否明显偏多(
可查范围)
关键:对比它的
比值 —— 若远高于集群平均值,才说明“单位槽位淘汰压力”异常,适合迁出部分槽
用
时容易忽略的关键参数
默认行为是“尽量均匀分配槽位数”,但它**完全不感知
或内存使用率**,所以盲目执行可能让问题恶化:
Redis 8.2.3
Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。
下载
必须加
:指定槽位迁移触发阈值(默认是 2),设为
可让微小不均也触发迁移,更适合淘汰敏感场景
必须加
:给高淘汰节点设
,低淘汰节点设
,强制 rebalance 倾向于从高压节点迁出
禁止用
:空 master 节点权重为 0,若误启用,可能导致槽全堆到少数节点上,加剧淘汰
执行前务必用
预览迁移计划,确认源节点确实是高
节点,且目标节点
有足够余量
迁移过程中客户端报
错误但业务没断,这正常吗
正常。只要不是持续大量
,就说明迁移正在按 Redis Cluster 协议推进:
出现是因为 key 所在槽正处于迁移中:源节点查不到,返回
让客户端重定向到目标节点
客户端 SDK(如 lettuce、
redis
-py)都自动处理
,无需业务代码修改
但如果
响应占比突然超过 5%,说明迁移节奏过快或目标节点网络延迟高,建议暂停并检查
中
和
是否滞后
真正危险的是
错误大量出现——那意味着槽已正式归属变更,但客户端本地缓存未刷新,属于配置或 SDK 版本问题
最易被忽略的一点:
高的节点,往往同时存在大量大 key 或 hash/set 膨胀,单纯迁槽只能缓解,不能根治。迁移后务必用
和
追查具体对象,否则下次扩容还会踩同样坑。
evicted_keysevicted_keysevicted_keysINFO memoryredis-cli --cluster nodes redis-cli -h -p INFO memory | grep evicted_keys evicted_keys5.0.144.0.0no-evictionevicted_keysevicted_keysevicted_keysused_memory_rss_humanredis-cli -h -p CLUSTER SLOTS evicted_keys / slot_countredis-cli --cluster rebalanceredis-cli --cluster rebalanceevicted_keys--threshold 1--weight = weight=0.5weight=1.2--use-empty-masters--dry-runevicted_keysused_memory_rss_humanASKASKASKASKASKASKredis-cli -h -p INFO replication master_sync_in_progressslave_repl_offsetMOVEDevicted_keysredis-cli --bigkeysMEMORY USAGE 