ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis 用scan扫描所有key的脚本

2021-10-29 14:29:59  阅读:185  来源: 互联网

标签:point ftmp scan redis awk 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比较多。

标签:point,ftmp,scan,redis,awk,key
来源: https://blog.csdn.net/MYF12/article/details/121030393

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有