删除线上无用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,测试一下脚本

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

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

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

相关推荐
小陳参上4 小时前
用Python创建一个Discord聊天机器人
jvm·数据库·python
minstbe6 小时前
IC设计私有化AI助手实战:基于Docker+OpenCode+Ollama的数字前端综合增强方案(进阶版)
人工智能·python·语言模型·llama
zyq99101_17 小时前
优化二分查找:前缀和降复杂度
数据结构·python·蓝桥杯
qyzm7 小时前
天梯赛练习(3月13日)
开发语言·数据结构·python·算法·贪心算法
jgyzl8 小时前
2026.3.9 Redis内存回收内存淘汰
数据库·redis·缓存
Qt学视觉8 小时前
AI2-Paddle环境搭建
c++·人工智能·python·opencv·paddle
廋到被风吹走8 小时前
【LangChain4j】特点功能及使用场景
后端·python·flask
Eward-an9 小时前
LeetCode 239. 滑动窗口最大值(详细技术解析)
python·算法·leetcode
喵手9 小时前
Python爬虫实战:用代码守护地球,追踪WWF濒危物种保护动态!
爬虫·python·爬虫实战·濒危物种·零基础python爬虫教学·wwf·濒危物种保护动态追踪
梦想的旅途29 小时前
如何通过 QiWe API 实现企业微信主动发消息
开发语言·python