#!/usr/bin/python
# -*- coding: UTF-8 -*-
import redis
import time
def run(host, port=9221, db=1):
pool = redis.ConnectionPool(host=host, port=port, db=1)
client = redis.StrictRedis(connection_pool=pool)
ts = 86400 * 15
total = client.dbsize()
print("total: ", total)
total, del_num, cursor = 0, 0, 0
del_keys = []
while True:
# 用scan的方式,每次读取count个key。
# client.keys()会把所有的key全部读出,这期间是完全阻塞的,其他访问全部等待
res = client.scan(cursor, count=3000)
# 游标
curr_cursor = res[0]
if curr_cursor > cursor:
cursor = curr_cursor
else:
break
# 遍历key
for key in res[1]:
total += 1
ttl = client.ttl(name=key)
if ttl > ts:
del_keys.append(key)
if len(del_keys) >= 5000:
print(del_keys[:10])
client.delete(*del_keys)
del_num += len(del_keys)
del_keys = []
print(total, del_num, cursor)
if len(del_keys) >= 0:
client.delete(*del_keys)
print(total, del_num, cursor)