import redis import time redis_cache = redis.Redis(host="", port=0000, password="xxxx", db=1) print("begin") print(redis_cache.dbsize()) begin_pos = 0 while True: result = redis_cache.scan(begin_pos, "xxxxx_*", 100000) return_pos, datalist = result print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), return_pos) if len(datalist) > 0: print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "delete", len(datalist)) redis_cache.delete(*datalist) if return_pos == 0: break begin_pos = return_pos print("over")
有几个知识点:
- scan命令的第一个入参从0开始代表从头扫描
- scan命令的返回是(pos, [])元组,第一个pos可以作为下次扫描的入参pos,第二个值就是扫描到的KEY
- scan命令的第三个参数,是本次扫描的KEY数目,比如传递10万个,但是返回的LIST可能是0,因为有0个匹配
- redis的delete命令传递的是array参数,可以用*list传递