Redis教程

redis 用scan扫描所有key的脚本

本文主要是介绍redis 用scan扫描所有key的脚本,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

需求:分析redis剩下都有哪些类型的key

如果我们redis有上亿的key留存,占用很大内存,那么我们不能直接使用key * 这种形式去查看。这样在生产上面直接会把redis搞垮掉。

所以需要用到scan工具分段去扫出所有的key,然后根据key的前缀分析都是一些什么key占用的。

脚本如下:

#/bin/bash
ftmp="tmp_key.txt"
rediskeys="allkeysrediskeys.txt"
# 指定扫描的范围,下面是每次扫描10000条数据,如果你redis机器性能好的话,可以调成10w
#redis-cli -h 192.168.2.222 -a '123456'  scan 0 match "*" count 10000 |awk '{print $1}' >${ftmp}
redis-cli  -h 192.168.2.222 -a '123456' -n 1 scan 0 match "*" count 1000 |awk '{print $1}' >${ftmp}
#for i in {1..10000}
for i in {1..10}
do
        echo "第 $i 次循环:"
        # 获取point点
        point=`sed -n 1p ${ftmp}`
        echo "$point"
        sed -i '1d' ${ftmp}
        cat ${ftmp} >> ${rediskeys}
        if [ ${point} -eq 0 ];then
                echo "point=0 end scripts!"
                exit 1
        fi
        # -n 指定库名
        redis-cli -h 192.168.2.222 -a '123456' -n 1 scan ${point} match "*" count 100000 |awk '{print $1}' > ${ftmp}
        echo "redis-cli  -h 192.168.2.222 -a 123456  scan ${point} match \"*\" count 1000000 |awk '{print $1}' > ${ftmp}"
    sleep 1
done

通过上面脚本,我们得出redis所有的key写入文件:allkeysrediskeys.txt

配合awk 或者其他命令工具进行分析。比如我定义的key 格式是:业务名称:电话号码或者其他的

这样我可以通过下面命令分析:

awk -F':' '{print $1}'  allkeysrediskeys.txt | sort -n | uniq -c | sort -n

通过输出可以看到主要是哪些业务的key比较多。

这篇关于redis 用scan扫描所有key的脚本的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!