数据库
首页 > 数据库> > 批量删除redis的key

批量删除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