redis優雅的批量刪除key
近期在處理redis的故障中,發現需要刪除大量的歷史數據(也是bigkeys),好在符合正則表達式。要不然就很痛苦,這也體現了在設計key的時候遵循規范帶來的維護好處之一。
簡要記錄如下(后期再完善):
redis優雅的批量刪除key
方式一:主從模式
redis-cli --scan --pattern "ops-coffee-*" | xargs -L 2000 redis-cli del
方式二:分布式(集群)
可能不支持keys 或者 scan
導出數據成rdb格式,找個環境,把rdb載入到這個環境中
redis-cli --scan --pattern "*" >delele_keys.txt
cat delele_keys.txt | awk -F"." '{print $2}' | sed 's/^/del /g' > delele_keys.txt.tmp
mv delele_keys.txt.tmp delele_keys.txt
如果小的話,可以直接執行:
cat /data/mysql/backup/01/total/delele_keys.txt | /usr/bin/redis-cli -p 6379 -h x.x.x.x >/dev/null
# 分割文件
split -l 500000 -d -a 4 delele_keys.txt
cat > /data/mysql/backup/01/total/0705_del_keys_00_09.sh<<"EOF"
#!/bin/bash
for i in {10..20}
do
cat /data/mysql/backup/01/total/x00"${i}" | /usr/bin/redis-cli -p 6379 -h x.x.x.x >/dev/null
sleep 300
done
EOF
sh /data/mysql/backup/01/total/0705_del_keys_00_09.sh &