Redis : 记一次flushdb操作

事件背景:

1、昨天下午出现了redis的内存使用率过高告警,emmm 发现 16G的机器,用了10G,最大限制12G,还有点空,直接调到了14G,使用命令:
CONFIG GET maxmemory #查询最大内存限制
CONFIG SET maxmemory “15032385536” #设置最大内存限制为14G
然后舒坦了,告警消失了。
2、晚上10点半准备洗洗休息完成一天的工作,然鹅 ,坑的事情来了,又告警了,这个redis,坑货啊,上去一看,已经12G多了,这个情况如何处理,通知领导,并且查原因,发现是别的应用批量导致问题,咨询开发后可以清理这些key ,so 有了这次生产flashdb的操作。

操作过程:

1、登录redis主节点,info 看下redis是不是主节点,确认下key数量和内存
2、执行:
select 0 #进入0号库
flushdb #清理当前数据库所有数据, 还有: flushall 清理所有数据库数据
3、等待: 如下图, 发起清理的时候大约13G内存,竟然跑了142秒,这个期间redis不可读写,请求直接超时,后续非紧急情况坚决不能进行这样的操作。
Redis : 记一次flushdb操作_第1张图片
4、执行完成再来下info ,这个时候神奇的事情发生了,节点变成了down 状态,并且触发了主从切换,新的主节点上数据依旧存在 ,发现这个情况心想要凉了,这问题怎么搞。
5、 先等了下,查找原因,发现一段时间后这个刚flushdb的主节点,数据又被恢复了,flushdb失败。
6、狠下心,再在主节点执行了一次,再次出现切换, 我跑到每个主节点都进行了flushdb操作。 总算全部清理完毕。

经验教训:

大数据量的redis不适合进行flunshdb操作;
需要替代方案;

你可能感兴趣的:(redis)