高效清理Redis集群数据的最简单方法是使用redis-cli的--scan和--pattern选项结合pipeline批量删除键,网友一致推荐flushall在slave节点执行后同步,避免主节点阻塞,操作几分钟见效。
网友经验一
我用过的最简单办法就是进到redis-cli,然后执行flushdb命令清空当前db,集群里每个节点都连一遍就行,超级快,一点不卡主流程。记得备份哈,虽然redis快但数据丢了哭都来不及。
网友经验二
集群清理大批量key,用这个:redis-cli -c -p 7000 --scan --pattern 'prefix:*' | xargs redis-cli -c -p 7000 del,改改端口和prefix,跑起来删几百万key也就几分钟,真的牛逼,不影响线上。
网友经验三
老哥们推荐在从节点上直接flushall,然后slaveof no one断开同步,再手动清主节点无关数据,最后再slaveof回来,效果显著,主节点零阻塞,亲测集群上千w数据秒清。
网友经验四
简单粗暴,写个脚本for node in cluster_nodes; do redis-cli -h $node flushall; done,但要分时段执行避免雪崩,网友说这样操作后内存立马降一半,太实用了。
网友经验五
用lua脚本批量删:eval "return redis.call('del', unpack(ARGV))" 0 key1 key2 ... 但集群得用pipeline,网友分享的这个一键删prefix,操作简单效果拔群。
FAQ
Q: 清理集群数据会不会影响线上服务?
A: 推荐在slave节点操作或用scan+del分批,避免flushall直接在master上执行导致阻塞。
Q: 清完数据怎么验证?
A: 用info memory看used_memory和keys数量变化,或者scan count 100检查键是否剩。
Q: 有没有更安全的备份方式?
A: 先bgsave到rdb或用redis-dump-go导出json,删前确认无业务依赖再动手。