redis 清理某个key前缀的key
2019-09-03 23:05
1641 查看
redis清理某个前缀的key
例如,某次研发上线代码,造成了某种前缀的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
相关文章推荐
- redis集群如何清理前缀相同的key
- java redis 删除指定前缀的key
- Redis如何优雅的删除特定前缀key
- 获取Redis所有Key / 删除指定前缀的Key
- 清除redis的特定前缀的key
- Redis获取某个前缀的key脚本实例
- 今天遇到了批量删除 redis 某个前缀的所有 key,发现只能是这么解决。
- java批量删除redis中以某字符串前缀的key
- Redis 面试知识点笔记(三)从海量数据里查询某一固定前缀的key
- Redis命令-键(key)
- Redis学习手册(Key操作命令)
- Redis中的批量删除数据库中的Key
- redis 删除所有key
- redis key 过期时间如何设置
- redis对于key的操作命令
- Redis VS. Memcached 均不适合数据量高于1千万条,且保证数据完整的key-value存储 .
- redis 批量删除key
- 【redis】key常见命令
- Redis对于key的操作命令
- Redis常用命令(1)——Key