近期在处理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 &