删除线上无用redis数据的方案(telnet+scan+python脚本)

有更好的方案也可以交流一下:

0、新建存储无用key的文档

1、收集线上所有的redis的key(从存在的项目中收集)

2、通过telnet ip 端口 连接redis客户端 例如:telnet 172.11.11.11 6379

3、进入如果有password,则需要输入: auth xxx(你的password)

4、测试读取一个存在的key,确认连接

5、通过 scan 0 match xx:* count 数量的形式,例如:scan 0 match xx:* count 10000

(具体参照scan用法,注意在scan遍历的时候不能删除或者添加),注意xx:*尽量只匹配一种key ,而count的数量可以根据自己redis的key的总数来定,匹配出来结果,观察该前缀的key的数量 记录到文档,get某一个来记录到文档;

6、对存有几乎所有redis 的key的信息的文档,进行组内评审,决定哪些需要删除,进行标记

7、使用python进行删除 python环境,pip/pip3环境

8、确认python环境,pip环境,

并安装reids客户端的api:pip install redis(单机)/pip install redis-py-cluster(集群)

9、写python脚本来对我们的无用的key进行删除,具体就是scan+del (需要注意scan过程中进行删除会存在问题,所以需要收集起来再删除),当然删除还有异步形式unlink但是我没用;

单机脚本:

(需要注意,复制粘贴可能会存在语法解析问题,需要把存在空格的地方,删除空格使用space空格补齐,缩进保持一致即可因为python语法跟缩进有关)

python 复制代码
import redis

redis_conn = redis.Redis(
    host='ip',
    port=6379,
    password='密码',
    db=0,
    decode_responses=True)

# 验证连接是否成功  
if redis_conn.ping():  
    print('Connection to Redis is successful.')  
else:  
    print('Connection to Redis failed.')

match_keys=[]#收集需要进行删除的字符匹配串
#添加你需要删除的reids的匹配前缀
match_keys.append('road:road:lane:*')

del_keys=[]#收集所有需要进行删除的key

#遍历所有匹配的key,放到列表
cursor = 0# 记录游标
for match_key in match_keys:
   print('=================')
   print('match_key:',match_key)
   while True:
       cursor, keys= redis_conn.scan(cursor, match=match_key, count=10000)
       if keys:
         print('key len:',len(keys))
         for key in keys:
            del_keys.append(key)
       if cursor == 0:break
#删除需要删除的列表中的key
for del_key in del_keys:
    print('del:',del_key)
    print('flag:',redis_conn.delete(del_key))

集群版本:

python 复制代码
import redis
from rediscluster import RedisCluster


port = 6379
# redis连接信息
# 应该是为了保证主从一致才需要连接所有的redis机器,然后在一个上修改,多个节点同步
redis_basis_conn = [
    {'host': 'ip1', 'port': port},
    {'host': 'ip2', 'port': port},
    {'host': 'ip3', 'port': port},
]



redis_conn= RedisCluster(startup_nodes=redis_basis_conn, password="你的密码")


# 验证连接是否成功  
if redis_conn.ping():  
    print('Connection to Redis is successful.')  
else:  
    print('Connection to Redis failed.')  


match_keys=[]
match_keys.append('road:road:lane:*')

del_keys=[]


cursor = 0
for match_key in match_keys:
   print('=================')
   print('match_key:',match_key)
   while True:
      temp= redis_conn.scan(cursor, match=match_key, count=10000)
      print(temp)#返回一个字典
      cursor,keys=temp['ip:端口']#在某一个机器上修改
      print(cursor)
      print(keys)
      if keys:
      	print('key len:',len(keys))
      	for key in keys:
            del_keys.append(key)
      if cursor == 0:break
for del_key in del_keys:
	print('del:',del_key)
	print('flag:',redis_conn.delete(del_key))

通过python 文件.py 就可以匹配+删除了,可以先自己设置几个key,测试一下脚本

注意:使用脚本注意语法,复制粘贴可能需要重制空格!!

文章如存在问题,希望各位大佬批评指正。小子一定修改;

或者有更好的方案可以交流讨论

相关推荐
想会飞的蒲公英5 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel6 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记6 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名6 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code7 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook7 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
爬也要爬着前进8 小时前
redis主从搭建
数据库·redis·缓存
我的xiaodoujiao10 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_4080996710 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing10 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr