Python3用scan和delete命令批量清理redis数据

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")

有几个知识点:

  1. scan命令的第一个入参从0开始代表从头扫描
  2. scan命令的返回是(pos, [])元组,第一个pos可以作为下次扫描的入参pos,第二个值就是扫描到的KEY
  3. scan命令的第三个参数,是本次扫描的KEY数目,比如传递10万个,但是返回的LIST可能是0,因为有0个匹配
  4. redis的delete命令传递的是array参数,可以用*list传递

 

相关推荐