mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-20 20:39:55 +00:00
feat: 添加任务管理和字典管理功能,优化系统配置和代码结构
本次提交主要包含以下变更: 1. 新增任务管理模块,支持定时任务的创建、更新、删除和状态管理 2. 新增字典管理模块,用于维护系统中常用的固定数据 3. 优化系统配置,移除Celery,改用APScheduler进行任务调度 4. 修复部分前端组件的样式问题,统一输入框宽度 5. 更新文档和相关图片资源,完善系统功能描述 这些变更旨在增强系统的可维护性和功能性,提供更灵活的任务调度机制和更便捷的字典数据管理方式。
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pickle
|
||||
from typing import Any, Optional
|
||||
from aioredis import Redis
|
||||
|
||||
from app.core.logger import logger
|
||||
|
||||
|
||||
class RedisCURD:
|
||||
"""缓存工具类"""
|
||||
|
||||
def __init__(self, redis: Redis):
|
||||
"""初始化"""
|
||||
self.redis = redis
|
||||
|
||||
async def mget(self, *keys: list)-> list:
|
||||
"""批量获取缓存
|
||||
|
||||
Args:
|
||||
*keys: 可变参数,接收多个键名
|
||||
|
||||
Returns:
|
||||
list: 返回缓存值列表
|
||||
"""
|
||||
try:
|
||||
data = await self.redis.mget(keys)
|
||||
return data
|
||||
except Exception as e:
|
||||
logger.error(f"批量获取缓存失败: {str(e)}")
|
||||
return []
|
||||
|
||||
async def get_keys(self, pattern: str = "*") -> list:
|
||||
"""获取缓存键名"""
|
||||
try:
|
||||
keys = await self.redis.keys(f"{pattern}")
|
||||
return keys
|
||||
except Exception as e:
|
||||
logger.error(f"获取缓存键名失败: {str(e)}")
|
||||
return []
|
||||
|
||||
|
||||
async def get(self, key: str) -> Any:
|
||||
"""获取缓存"""
|
||||
try:
|
||||
data = await self.redis.get(f"{key}")
|
||||
|
||||
if data is None:
|
||||
return None
|
||||
|
||||
return data
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取缓存失败: {str(e)}")
|
||||
return None
|
||||
|
||||
async def set(self, key: str, value: Any, expire: Optional[int] = None) -> bool:
|
||||
"""设置缓存"""
|
||||
try:
|
||||
if expire is None:
|
||||
expire = 300
|
||||
|
||||
# 根据数据类型选择序列化方式
|
||||
if isinstance(value, (int, float, str)):
|
||||
data = str(value).encode('utf-8')
|
||||
else:
|
||||
try:
|
||||
data = pickle.dumps(value)
|
||||
except Exception as e:
|
||||
logger.error(f"序列化数据失败: {str(e)}")
|
||||
return False
|
||||
|
||||
await self.redis.set(
|
||||
name = key,
|
||||
value = data,
|
||||
ex=expire
|
||||
)
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"设置缓存失败: {str(e)}")
|
||||
return False
|
||||
|
||||
async def delete(self, *keys: str) -> bool:
|
||||
"""删除缓存"""
|
||||
try:
|
||||
await self.redis.delete(*keys)
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"删除缓存失败: {str(e)}")
|
||||
return False
|
||||
|
||||
async def clear(self, pattern: str = "*") -> bool:
|
||||
"""清空缓存"""
|
||||
try:
|
||||
keys = await self.redis.keys(f"{pattern}")
|
||||
if keys:
|
||||
await self.redis.delete(*keys)
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"清空缓存失败: {str(e)}")
|
||||
return False
|
||||
|
||||
async def exists(self, key: str) -> bool:
|
||||
"""判断缓存是否存在"""
|
||||
try:
|
||||
return await self.redis.exists(f"{key}")
|
||||
except Exception as e:
|
||||
logger.error(f"判断缓存是否存在失败: {str(e)}")
|
||||
return False
|
||||
|
||||
async def ttl(self, key: str) -> int:
|
||||
"""获取缓存过期时间"""
|
||||
try:
|
||||
return await self.redis.ttl(f"{key}")
|
||||
except Exception as e:
|
||||
logger.error(f"获取缓存过期时间失败: {str(e)}")
|
||||
return -1
|
||||
|
||||
async def expire(self, key: str, expire: int) -> bool:
|
||||
"""设置缓存过期时间"""
|
||||
try:
|
||||
return await self.redis.expire(f"{key}", expire)
|
||||
except Exception as e:
|
||||
logger.error(f"设置缓存过期时间失败: {str(e)}")
|
||||
return False
|
||||
|
||||
async def info(self) -> dict:
|
||||
"""获取缓存信息"""
|
||||
try:
|
||||
return await self.redis.info()
|
||||
except Exception as e:
|
||||
logger.error(f"获取缓存信息失败: {str(e)}")
|
||||
return {}
|
||||
|
||||
async def db_size(self) -> int:
|
||||
"""获取数据库大小"""
|
||||
try:
|
||||
return await self.redis.dbsize()
|
||||
except Exception as e:
|
||||
logger.error(f"获取数据库大小失败: {str(e)}")
|
||||
return 0
|
||||
async def commandstats(self):
|
||||
"""获取命令统计信息"""
|
||||
try:
|
||||
return await self.redis.info("commandstats")
|
||||
except Exception as e:
|
||||
logger.error(f"获取命令统计信息失败: {str(e)}")
|
||||
return {}
|
||||
Reference in New Issue
Block a user