前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis 清理某个key前缀的key

redis 清理某个key前缀的key

作者头像
保持热爱奔赴山海
发布2019-09-17 14:55:12
4.3K0
发布2019-09-17 14:55:12
举报
文章被收录于专栏:数据库相关

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 解析工具

代码语言:javascript
复制
pip install rdbtools python-lzf   # python2.7 下 一行命令即可完成安装

rdb -c memory dump-6379.rdb > memory.csv  # 用这个命令将rdb进行分析

3、过滤出符合条件的key

代码语言:javascript
复制
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  内容如下:

代码语言:javascript
复制
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

这样就生成了一堆的脚本

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

代码语言:javascript
复制
#!/bin/bash
for i in `ls run*.sh`; do 
nohup sh $i > /dev/null &
done
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档