161 lines
5.9 KiB
Python
161 lines
5.9 KiB
Python
|
import redis
|
|||
|
|
|||
|
def show_db_status(r, db_index):
|
|||
|
"""显示指定数据库的状态信息"""
|
|||
|
try:
|
|||
|
# 切换到指定数据库
|
|||
|
r.select(db_index)
|
|||
|
|
|||
|
# 检查并显示Cookie状态
|
|||
|
cookie = r.get('cookie')
|
|||
|
if cookie:
|
|||
|
print(f"Cookie值: {cookie}")
|
|||
|
else:
|
|||
|
print("Cookie状态: 匿名")
|
|||
|
|
|||
|
# 获取所有键
|
|||
|
all_keys = r.keys('*')
|
|||
|
|
|||
|
# 统计图片ID数量
|
|||
|
pid_count = len([key for key in all_keys if key.startswith('downloaded:') and '_p0' in key])
|
|||
|
print(f"当前存储的图片作品数量: {pid_count}\n")
|
|||
|
except redis.RedisError as e:
|
|||
|
print(f"错误:{str(e)}")
|
|||
|
|
|||
|
def check_redis_status():
|
|||
|
"""检查Redis状态并显示详细信息"""
|
|||
|
try:
|
|||
|
# 连接到Redis
|
|||
|
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
|
|||
|
|
|||
|
# 检查连接
|
|||
|
r.ping()
|
|||
|
|
|||
|
# 获取活跃数据库信息(仅0-5)
|
|||
|
info = r.info()
|
|||
|
keyspace_info = {k: v for k, v in info.items() if k.startswith('db')}
|
|||
|
|
|||
|
# 过滤0-5范围内的数据库
|
|||
|
valid_indices = set(range(6)) # 0-5
|
|||
|
db_indices = [int(k.replace('db', '')) for k in keyspace_info.keys() if int(k.replace('db', '')) in valid_indices]
|
|||
|
db_indices.sort()
|
|||
|
|
|||
|
if not db_indices:
|
|||
|
print("\n当前没有活跃的数据库")
|
|||
|
return
|
|||
|
db_list = ', '.join([f"db{i}" for i in db_indices])
|
|||
|
print(f"\n活跃的Redis数据库: {db_list}")
|
|||
|
|
|||
|
if len(db_indices) == 1:
|
|||
|
# 只有一个数据库,直接显示其信息
|
|||
|
print(f"\n数据库 db{db_indices[0]} 的信息:")
|
|||
|
show_db_status(r, db_indices[0])
|
|||
|
else:
|
|||
|
# 多个数据库,让用户选择
|
|||
|
while True:
|
|||
|
choice = input("\n请选择要查看的数据库编号 (例如: 0 表示db0): ")
|
|||
|
try:
|
|||
|
db_index = int(choice)
|
|||
|
if db_index in db_indices:
|
|||
|
print(f"\n数据库 db{db_index} 的信息:")
|
|||
|
show_db_status(r, db_index)
|
|||
|
break
|
|||
|
else:
|
|||
|
print("无效的数据库编号,请重试")
|
|||
|
except ValueError:
|
|||
|
print("请输入有效的数字")
|
|||
|
|
|||
|
except redis.ConnectionError:
|
|||
|
print("错误:无法连接到Redis服务器,请确保Redis服务正在运行")
|
|||
|
except Exception as e:
|
|||
|
print(f"错误:{str(e)}")
|
|||
|
|
|||
|
def clear_redis_db():
|
|||
|
"""清空Redis数据库"""
|
|||
|
try:
|
|||
|
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
|
|||
|
# 获取当前数据库信息(仅0-5)
|
|||
|
info = r.info()
|
|||
|
keyspace_info = {k: v for k, v in info.items() if k.startswith('db')}
|
|||
|
|
|||
|
# 过滤0-5范围内的数据库
|
|||
|
valid_indices = set(range(6)) # 0-5
|
|||
|
db_indices = [int(k.replace('db', '')) for k in keyspace_info.keys() if int(k.replace('db', '')) in valid_indices]
|
|||
|
db_indices.sort()
|
|||
|
|
|||
|
if not db_indices:
|
|||
|
print("\n当前没有活跃的数据库")
|
|||
|
return
|
|||
|
db_list = ', '.join([f"db{i}" for i in db_indices])
|
|||
|
print(f"\n活跃的Redis数据库: {db_list}")
|
|||
|
print("\n清空选项:")
|
|||
|
print("1. 清空指定数据库")
|
|||
|
print("2. 清空所有数据库")
|
|||
|
print("3. 取消操作")
|
|||
|
|
|||
|
choice = input("请选择操作 (1-3): ")
|
|||
|
|
|||
|
if choice == '1':
|
|||
|
if len(db_indices) == 1:
|
|||
|
db_index = db_indices[0]
|
|||
|
confirm = input(f"确定要清空数据库 db{db_index} 吗?(y/n): ")
|
|||
|
if confirm.lower() == 'y':
|
|||
|
r.select(db_index)
|
|||
|
r.flushdb()
|
|||
|
print(f"数据库 db{db_index} 已清空\n")
|
|||
|
else:
|
|||
|
while True:
|
|||
|
choice = input("\n请选择要清空的数据库编号 (例如: 0 表示db0): ")
|
|||
|
try:
|
|||
|
db_index = int(choice)
|
|||
|
if 0 <= db_index <= 5 and db_index in db_indices:
|
|||
|
confirm = input(f"确定要清空数据库 db{db_index} 吗?(y/n): ")
|
|||
|
if confirm.lower() == 'y':
|
|||
|
r.select(db_index)
|
|||
|
r.flushdb()
|
|||
|
print(f"数据库 db{db_index} 已清空\n")
|
|||
|
break
|
|||
|
else:
|
|||
|
print("无效的数据库编号,请重试")
|
|||
|
except ValueError:
|
|||
|
print("请输入有效的数字")
|
|||
|
|
|||
|
elif choice == '2':
|
|||
|
confirm = input("确定要清空所有数据库吗?(y/n): ")
|
|||
|
if confirm.lower() == 'y':
|
|||
|
for db_index in range(6): # 0-5
|
|||
|
r.select(db_index)
|
|||
|
r.flushdb()
|
|||
|
print("所有的数据库已清空\n")
|
|||
|
elif choice == '3':
|
|||
|
print("已取消操作\n")
|
|||
|
else:
|
|||
|
print("无效的选择\n")
|
|||
|
|
|||
|
except redis.ConnectionError:
|
|||
|
print("错误:无法连接到Redis服务器,请确保Redis服务正在运行")
|
|||
|
except Exception as e:
|
|||
|
print(f"错误:{str(e)}")
|
|||
|
|
|||
|
def show_menu():
|
|||
|
"""显示交互菜单"""
|
|||
|
while True:
|
|||
|
print("=== Redis管理工具 ===")
|
|||
|
print("1. 显示状态")
|
|||
|
print("2. 清空数据库")
|
|||
|
print("3. 退出")
|
|||
|
choice = input("请选择操作 (1-3): ")
|
|||
|
|
|||
|
if choice == '1':
|
|||
|
check_redis_status()
|
|||
|
elif choice == '2':
|
|||
|
clear_redis_db()
|
|||
|
elif choice == '3':
|
|||
|
print("退出程序")
|
|||
|
break
|
|||
|
else:
|
|||
|
print("无效的选择,请重试\n")
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
show_menu()
|