python 批量删除指定前缀的key

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值