AWS ElastiCache for Redis:--bigkeys/--hotkeys命令MOVED错误排查
问题解决:ElastiCache Redis集群下redis-cli --hotkeys/--bigkeys报MOVED错误
核心原因
--hotkeys和--bigkeys命令不支持集群模式的自动重定向,哪怕添加-c参数也无效。这是因为这类命令的实现逻辑是直接连接单个节点执行全量扫描,不会像GET/SET这类常规键操作那样遵循MOVED重定向规则,而-c参数仅对常规键操作命令生效。
解决方法
方法1:逐个连接分片主节点执行命令
ElastiCache集群的每个分片相互独立,需找到各分片的主节点端点,分别连接执行命令:
- 通过AWS控制台或
aws elasticache describe-cache-clusters命令获取所有分片的主节点端点 - 针对每个主节点执行:
redis6-cli -h <主节点端点> -p <端口> --hotkeys redis6-cli -h <主节点端点> -p <端口> --bigkeys
方法2:批量获取主节点后自动执行
先通过集群命令提取所有主节点信息,再循环执行扫描命令:
# 导出所有主节点端点 redis6-cli -c -h <集群配置端点> -p <端口> cluster nodes | grep "master" | awk '{print $2}' > master_nodes.txt # 批量扫描热键 while read node; do host=$(echo $node | cut -d':' -f1) port=$(echo $node | cut -d':' -f2 | cut -d'@' -f1) echo "=== 扫描主节点 $host:$port 的热键 ===" redis6-cli -h $host -p $port --hotkeys done < master_nodes.txt
方法3:用CloudWatch监控替代手动扫描
如果不想执行命令,可利用AWS CloudWatch的ElastiCache指标间接分析:
- 大键:查看
BytesUsedForCache(缓存占用空间)、CurrItems(分片键数量)指标,定位占用资源高的分片 - 热键:分析
GetCmds、SetCmds等命令指标,结合分片维度筛选访问量异常的节点
补充说明
常规GET/SET/SCAN命令能正常工作,是因为-c参数会让redis-cli自动处理MOVED重定向,将请求转发到对应分片节点,但--hotkeys和--bigkeys属于特殊全量扫描命令,未集成重定向逻辑,必须直接连接目标分片节点执行。
内容的提问来源于stack exchange,提问作者Giuliani Sanches
相关产品推荐
相关产品推荐

