清除Redis中未设置过期时间的key

线上redis有一些历史遗留的未设置过期时间的key,导致redis空间占用较多,DBA告警后要我们自己清除,于是我写了一个脚本在不影响线上服务的情况下清除(使用keys命令会导致请求hang住)

import sys
import redis
import os
pool = redis.ConnectionPool(host = "host_name",password = "pass_word",port = 6379)
r = redis.StrictRedis(connection_pool = pool)
match = sys.argv[1]+"*"
print(match)
count = 10000
for key in r.scan_iter(match = match,count = count):
	time = r.ttl(key)
	if time==-1:
		r.expire(key,1000)
		print("set expire key:",key)
	print(time)

这里host_name和pass_word打个码

sys.argv[1]指传入的第一个参数,执行的时候就用python3 xxx.py hello 就会自动扫描hello开头的key,步进10000个,然后将其过期时间设为1000秒,过一会就自动过期了。

在业务低峰期的话步进可以设大点,这样清的会比较快,我们为了清几十万个key花了半个多小时。

你可能感兴趣的:(清除Redis中未设置过期时间的key)