redis 删除大量 key
redis
Published: 2022-08-15

禁止使用 FLUSHDB !!!

禁止使用 FLUSHDB !!!

禁止使用 FLUSHDB !!!

重要的事情说3遍,我们有同事在生产环境直接FLUSHDB,直接导致redis挂了。

1. 删除命令

redis-cli -h localhost -p 6379 -a 'password' --scan --pattern '*' -n 1 >> db1-keys.txt

time cat db1-keys.txt | xargs -n 10000 redis-cli  -h localhost -p 6379 -a 'password' -n 1 DEL | tee count.txt

2. 删除脚本

#!/bin/sh

EXEC_TIME=`date '+%Y%m%d%H%M%y'`

REDIS_HOST=$1
REDIS_PASSWORD=$2
REDIS_DB=$3
PATTEN=$4
NUMBERS=$5

TMP_FILE_NAME=redis-db-$REDIS_DB-$EXEC_TIME.txt
RESULT_FILE_NAME=redis-db-$REDIS_DB-$EXEC_TIME-result.txt

echo "数据库地址: $REDIS_HOST"
echo "数据库密码: $REDIS_PASSWORD"
echo "数据库DB: $REDIS_DB"
echo "匹配字符串: $PATTEN"
echo "批量删除行数: $NUMBERS"

echo "执行时间: $EXEC_TIME"
echo "Keys文件名: $TMP_FILE_NAME"
echo "执行结果: $RESULT_FILE_NAME"

redis-cli -h $REDIS_HOST -p 6379 -a "$REDIS_PASSWORD" --scan --pattern "$PATTEN" -n $REDIS_DB >> $TMP_FILE_NAME

time cat $TMP_FILE_NAME | xargs -n $NUMBERS redis-cli -h $REDIS_HOST -p 6379 -a "$REDIS_PASSWORD" -n $REDIS_DB DEL | tee $RESULT_FILE_NAME

echo 'Done'

将以上脚本保存为del-redis.sh使用方法:

chmod +x del-redis.sh
./del-redis.sh 'localhost' 'password' 1 '*' 1000

3. 相关链接