bigkeys 扫描

/redis-cli -h localhost -p 6379 --bigkeys

全量扫描

通过以下脚本扫描 Redis中的全量Keys, Keys存量较大的情况下,可以分多次优化处理。
比如:keys.txt文件收集到100MB时,停止,先优化一部分;优化完,再扫描,再优化。
脚本如下,注意确保脚本在 ./redis-cli 统计目录,或修改为绝对 redis-cli 绝对路径执行。

#!/bin/bash
##redis主机IP
host=$1
##redis端口
port=$2
##key模式
pattern=$3
db=$4
##游标
cursor=0
##退出信号
signal=0

echo "">~/keys.txt

##循环获取key并删除
while [ $signal -ne 1 ]
    do

        ##将redis scan得到的结果赋值到变量
        re=$(./redis-cli -h $host -p $port -c -n $db scan $cursor count 1000 match $pattern)

        ##以换行作为分隔符
        IFS=$'\n'

        ##转成数组
        arr=($re)

        ##第一个元素是游标值
        cursor=${arr[0]}

        ##打印数组
        len=${#arr[*]}
        for ((i=1;i<len;i++))
                do
                   a=${arr[i]}
                   echo $a >> ~/keys.txt
                done

        ##游标为0表示没有key了
        if [ $cursor -eq 0 ];then
            signal=1
        fi
done
echo 'done'

得到 keys.txt 文件后,使用 awk, uniq, sort 等命令进行归并排序,脚本如下:

sort keys.txt >> keys-sort.txt
cat keys-sort.txt | awk -F ':' '{print $1":"$2":"$3}' |  uniq -c | sort -rn  

分隔符和打印内容可以按实际情况调节输出,便于阅读。输出结果后,便可定位具体的Key进行优化了。