事件背景:
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不可讀寫,請求直接逾時,後續非緊急情況堅決不能進行這樣的操作。

4、執行完成再來下info ,這個時候神奇的事情發生了,節點變成了down 狀态,并且觸發了主從切換,新的主節點上資料依舊存在 ,發現這個情況心想要涼了,這問題怎麼搞。
5、 先等了下,查找原因,發現一段時間後這個剛flushdb的主節點,資料又被恢複了,flushdb失敗。
6、狠下心,再在主節點執行了一次,再次出現切換, 我跑到每個主節點都進行了flushdb操作。 總算全部清理完畢。
經驗教訓:
大資料量的redis不适合進行flunshdb操作;
需要替代方案;