bigkeys 扫描
/redis-cli -h localhost -p 6379 --bigkeys
全量扫描
通过以下脚本扫描 Redis中的全量Keys, Keys存量较大的情况下,可以分多次优化处理。
比如:keys.txt文件收集到100MB时,停止,先优化一部分;优化完,再扫描,再优化。
脚本如下,注意确保脚本在 ./redis-cli 统计目录,或修改为绝对 redis-cli 绝对路径执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #!/bin/bash # host=$1 # port=$2 # pattern=$3 db=$4 # cursor=0 # signal=0
echo "">~/keys.txt
# 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 等命令进行归并排序,脚本如下:
1 2
| sort keys.txt >> keys-sort.txt cat keys-sort.txt | awk -F ':' '{print $1":"$2":"$3}' | uniq -c | sort -rn
|
分隔符和打印内容可以按实际情况调节输出,便于阅读。输出结果后,便可定位具体的Key进行优化了。