批量删除redis的key
作者:互联网
项目中某个redis的key下面有几十万条数据,用rdm工具删能卡死,于是用python写了一个脚本来删,效果非常不错,推荐给大家。
举个例子com:uecent:udata:climb下面有几十万条数据,比如
com:uecent:udata:climb:1000001
com:uecent:udata:climb:1000001
com:uecent:udata:climb:1000003
…
执行命令:
python3 redis_delete.py -d 2 -k com:uecent:udata:climb
-d 2:表示删除redis第2个数据库,可以指定0-15
-k:表示删除的key前缀
可以本地执行,也可以放到服务器上执行。建议拿到服务器上执行,本地执行估计比较慢。
拿到服务器上执行貌似也可以用redis客户端:redis-cli keys “com:uecent:udata:climb*” | xargs redis-cli del,不过还是感觉我这个脚本更方便,特别是装在docker容器里面的,或者没有权限登陆服务器的。
redis_delete.py
# -*- coding:UTF-8 -*-
import redis
import sys
import getopt
host = '127.0.0.1'
port = '6379'
password = 'xxxxxxxx'
def delete(key, database):
r = redis.Redis(host=host, port=port, db=database, password=password, decode_responses=True)
list_keys = r.keys("%s*" % key)
for key in list_keys:
r.delete(key)
if __name__ == "__main__":
root_path = ""
is_rename = True
argv = sys.argv[1:]
if len(argv) < 1:
print('redis_delete.py -k <Key> -d <Database>')
sys.exit()
# 获取命令行参数
try:
opts, args = getopt.getopt(argv, "hk:d:", ["kKey=", "dDatabase="])
except getopt.GetoptError:
print('redis_delete.py -k <Key> -d <Database>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print('redis_delete.py -k <Key> -d <Database>')
sys.exit()
elif opt in ("-k", "--kKey"):
key = arg
elif opt in ("-d", "--dDatabase"):
database = arg
delete(key, int(database))
wjf8882300
发布了20 篇原创文章 · 获赞 14 · 访问量 3万+
私信
关注
标签:批量,uecent,redis,key,climb,com,delete 来源: https://blog.csdn.net/wjf8882300/article/details/104614086