#!/usr/bin/env python
# Scan and delete keys in Redis.
# Author: cdfive
from redis import Redis
import time
def RedisScanAndDelete(host, port, password, db, cursor, pattern, count, batch_delete_size):
start_time = time.time()
client = Redis(host=host, port=port, password=password, db=db)
counts, other_cursor_counts = 0, 0
delete_keys = []
while True:
cursor, keys = client.scan(cursor, pattern, count)
length = len(keys)
if length > 0:
index = 0
for key in keys:
index += 1
counts += 1
print("[%s][%s]%s,cursor=%s" % (
int(time.time() - start_time), counts, key.decode("utf-8"), cursor))
delete_keys.append(key)
if (len(delete_keys) >= batch_delete_size or index >= length) and len(delete_keys) > 0:
client.delete(*delete_keys)
delete_keys = []
else:
other_cursor_counts += 1
print("[%s][other_curosr]other_cursor_counts=%s,cursor=%s" % (
int(time.time() - start_time), other_cursor_counts, cursor))
if cursor == 0:
break
client.close()
print("[%s]counts=%s,cursor=%s,other_cursor_counts=%s"
% (int(time.time() - start_time), counts, cursor, other_cursor_counts))
RedisScanAndDelete("localhost", 6379, "123456", 0, 0, "*xxx*", 1000, 100)
参考教程:https://blog.51cto.com/u_56701/6473475