批量刪除redis的key
阿新 • • 發佈:2020-03-02
專案中某個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_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))