redis清理某个key前缀的key-创新互联

redis清理某个前缀的key

创新互联建站专注于企业营销型网站、网站重做改版、木垒哈萨克网站定制设计、自适应品牌网站建设、H5高端网站建设商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为木垒哈萨克等各大城市提供网站开发制作服务。

例如,某次研发上线代码,造成了某种前缀的key出现了脏数据(例如key前缀名称为 key_  ), 我们需要快速的清理掉这些问题key。

常用的方法有2种:

1、dump出一个全量数据,然后找出符合条件的key,进行删除操作【推荐】

2、使用scan扫描redis,将全部key捞出来,然后再删除符合条件的key

我们这里使用第一种方法,具体如下操作:

1、在slave节点bgsave命令dump出一份全量数据

bgsave  ,生成的文件名类似  dump-6379.rdb 

2、 安装 rdb 解析工具

pip install rdbtools python-lzf   # python2.7 下 一行命令即可完成安装 rdb -c memory dump-6379.rdb > memory.csv  # 用这个命令将rdb进行分析

3、过滤出符合条件的key

awk  -F ',' '{print $3 ,  $NF }'  memory.csv > keys.txt    # 过滤出key的名称和过期时间 egrep key_  keys.txt > /root/key_.txt     # 将 key_ 前缀的key 过滤出来 cat /root/key_.txt | sort -k 2 -r > /root/sort_keys    # 对key按照日期进行倒序排序 egrep 2019-09-10 /root/sort_keys  > /root/match_keys    # 注意:我这里紧急处理,只过滤出 2019-09-10 过期的key(这是最新的数据,也是目前业务最常访问的key,也就是最需要紧急处理的) awk '{print $1}' /root/match_keys > /root/filter_keys    # 将最终需要处理的key重定向到一个文件 mkdir /root/test/ split -2000 /root/filter_keys  /root/test/    # 将 filter_keys 这个文件 按照每个2k行切分成多个文件,便于后续并行处理

然后,我们写个脚本,批量处理下:

vim /root/batch.sh  内容如下:

for i in `ls /root/test/`; do echo "while read line;do echo \"del \$line\" | redis-cli -h 127.0.0.1 -p 6379  done < /root/test/${i}" > /root/run_${i}.sh chmod +x /root/run_${i}.sh  done

这样就生成了一堆的脚本

下面写个脚本,批量执行下就好了;

#!/bin/bash for i in `ls run*.sh`; do  nohup sh $i > /dev/null & done

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:redis清理某个key前缀的key-创新互联
文章来源:http://pwwzsj.com/article/dodcsc.html