批量删除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))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值