1、插入测试数据
[root@test01 ~]# vim /home/redis_insert_date.py
#!/usr/local/bin/python3
# coding=utf-8
import redis
import sys
import datetime
def create_testdata():
r = redis.StrictRedis(host='172.31.0.xx', port=6379, password='xxx', db=0)
counter = 0
with r.pipeline(transaction=False) as p:
for i in range(0, 10000):
#p.set('app_wx:token:access:key:' + str(i), "value" + str(i))
p.setex('app_wx:token:access:key:' + str(i), 2000 ,"value" + str(i))
counter = counter + 1
if (counter == 100):
p.execute()
counter = 0
print("set by pipline loop")
if __name__ == "__main__":
create_testdata()
[root@test01 ~]#
[root@test01 ~]# chmod +x /home/redis_insert_date.py
[root@test01 ~]# /home/redis_insert_date.py
2、判断指定前缀的key并删除
import redis
client = redis.StrictRedis(host='172.31.0.xx', port=6379, db=0,password='xxx',decode_responses=True)
def print_num(key_name):
result = client.keys(key_name)
print(len(result))
def print_key(key_name):
key_list = client.keys(key_name)
for i in key_list:
print(i)
#return key_list
def delete_key(key_name):
key_list=client.keys(key_name)
for i in key_list:
#print(i)
client.delete(i)
print('Delete Ok !!!')
# 执行
print_num('app_wx:token:access:key:*')
print_key('app_wx:token:access:key:*')
delete_key('app_wx:token:access:key:*')
3、判断指定前缀的key的ttl是否大于1500s(一年) 大于则删除
import redis
client = redis.StrictRedis(host='172.31.0.xx', port=6379, db=0,password='xxx',decode_responses=True)
# 定义一个最大的保留时间
#max=800000000
# 设置时间1年
#max=31536000
# 设置时间1年
max=1500
def print_num(key_name):
result = client.keys(key_name)
print(len(result))
def print_key(key_name):
key_list = client.keys(key_name)
for i in key_list:
print(i)
#return key_list
def delete_num(key_name):
key_list=client.keys(key_name)
total_nul=0
for i in key_list:
#print(i)
ttl_result=client.ttl(i)
if ttl_result>max:
total_nul=total_nul+1
print(total_nul)
def delete_key(key_name):
key_list=client.keys(key_name)
for i in key_list:
#print(i)
ttl_result=client.ttl(i)
if ttl_result>max:
#print(i)
result=client.delete(i)
print('Delete Ok !!!')
# 执行
print_num('app_wx:token:access:key:*')
print_key('app_wx:token:access:key:*')
delete_num('app_wx:token:access:key:*')
delete_key('app_wx:token:access:key:*')
4、分组删除每组之间间隔0.5s,每组1000个key
# 将前100个分10组进行删除,每删除完一组sleep 2秒
import subprocess
import redis
import time
# 定义redis 连接信息
IP="172.31.0.xx"
PORT="6379"
PASSWD="xxx"
DB=0
# 定义每次处理key的数量
num=100
# 定义key的前缀
key_part="app_wx:token:access:key*"
# 连接redis
client = redis.StrictRedis(host=IP, port=PORT, db=DB,password=PASSWD,decode_responses=True)
# 获取满足条件的所有key的数量
key_num=subprocess.getoutput("redis-cli -h " + IP + " -p " + PORT + " -n " + str(DB) + " -a "+ PASSWD + " keys " + key_part + " 2>/dev/null |wc -l ")
#print(key_num)
# 获取满足条件key的所有key
key_name=subprocess.getoutput("redis-cli -h " + IP + " -p " + PORT + " -n " + str(DB) + " -a " + PASSWD + " keys " + key_part + " 2>/dev/null ")
# 获取满足条件key的前多少行
#key_name=subprocess.getoutput("redis-cli -h " + IP + " -p " + PORT + " -n " + str(DB) + " -a " + PASSWD + " keys " + key_part + " 2>/dev/null |head -" + str(num))
all_key_list=key_name.split()
print(len(all_key_list))
#values=range(0,100)
#mini_key_list = [ all_key_list[i : i + 10] for i in range(0, len(all_key_list), 10) ]
mini_key_list = [ all_key_list[i : i + 1000] for i in range(0, len(all_key_list), 1000) ]
#print(val)
for key_list in mini_key_list:
#time.sleep(2)
for key in key_list:
#print(key,end=' ') # 在同一行输出
#print(key)
#print(key[0:20])
# 删除满足条件的key
result=client.delete(key)
# 输出完一组后输出空格,便于区分
#print(' ',end='\n')
print('Delete Ok !!!')
time.sleep(0.5)
5、分组删除,每组之间间隔2s,每组1000个key
# 将前100个分10组进行删除,每删除完一组sleep 2秒
import subprocess
import redis
import time
# 定义redis 连接信息
IP="172.31.0.xx"
PORT="6379"
PASSWD="xxx"
DB=0
# 定义每次处理key的数量
num=100
# 定义key的前缀
key_part="app_wx:token:access:key*"
# 定义一个最大的保留时间
#max=800000000
# 设置时间1年
#max=31536000
# 设置时间1年
max=1500
# 连接redis
client = redis.StrictRedis(host=IP, port=PORT, db=DB,password=PASSWD,decode_responses=True)
# 获取满足条件的所有key的数量
key_num=subprocess.getoutput("redis-cli -h " + IP + " -p " + PORT + " -n " + str(DB) + " -a "+ PASSWD + " keys " + key_part + " 2>/dev/null |wc -l ")
#print(key_num)
# 获取满足条件key的所有key
key_name=subprocess.getoutput("redis-cli -h " + IP + " -p " + PORT + " -n " + str(DB) + " -a " + PASSWD + " keys " + key_part + " 2>/dev/null ")
# 获取满足条件key的前多少行,限制删除的行数 参数 num
#key_name=subprocess.getoutput("redis-cli -h " + IP + " -p " + PORT + " -n " + str(DB) + " -a " + PASSWD + " keys " + key_part + " 2>/dev/null |head -" + str(num))
all_key_list=key_name.split()
print(len(all_key_list))
#values=range(0,100)
#mini_key_list = [ all_key_list[i : i + 10] for i in range(0, len(all_key_list), 10) ]
mini_key_list = [ all_key_list[i : i + 1000] for i in range(0, len(all_key_list), 1000) ]
#print(val)
for key_list in mini_key_list:
#time.sleep(2)
for key in key_list:
#print(key,end=' ') # 在同一行输出
#print(key)
ttl=client.ttl(key)
#print(ttl)
if ttl>max:
#print(ttl)
#print(key[0:30])
# 删除满足条件的key
result=client.delete(key)
# 输出完一组后输出空格,便于区分
#print(' ',end='\n')
# 一组删除完后输出一个delete
print('Delete Ok !!!')
time.sleep(2)