初始提交
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
from fastapi import FastAPI
|
||||
from redis import asyncio as aioredis
|
||||
from redis.exceptions import AuthenticationError, RedisError
|
||||
from redis.exceptions import TimeoutError as RedisTimeoutError
|
||||
|
||||
from config.database import AsyncSessionLocal
|
||||
from config.env import RedisConfig
|
||||
from module_admin.service.config_service import ConfigService
|
||||
from module_admin.service.dict_service import DictDataService
|
||||
from utils.log_util import logger
|
||||
|
||||
|
||||
class RedisUtil:
|
||||
"""
|
||||
Redis相关方法
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
async def create_redis_pool(cls, log_enabled: bool = True, log_start_enabled: bool | None = None) -> aioredis.Redis:
|
||||
"""
|
||||
应用启动时初始化redis连接
|
||||
|
||||
:param log_enabled: 是否输出日志
|
||||
:param log_start_enabled: 是否输出开始连接日志
|
||||
:return: Redis连接对象
|
||||
"""
|
||||
redis = await aioredis.from_url(
|
||||
url=f'redis://{RedisConfig.redis_host}',
|
||||
port=RedisConfig.redis_port,
|
||||
username=RedisConfig.redis_username,
|
||||
password=RedisConfig.redis_password,
|
||||
db=RedisConfig.redis_database,
|
||||
encoding='utf-8',
|
||||
decode_responses=True,
|
||||
)
|
||||
if log_start_enabled is None:
|
||||
log_start_enabled = log_enabled
|
||||
if log_enabled or log_start_enabled:
|
||||
await cls.check_redis_connection(redis, log_enabled=log_enabled, log_start_enabled=log_start_enabled)
|
||||
return redis
|
||||
|
||||
@classmethod
|
||||
async def check_redis_connection(
|
||||
cls, redis: aioredis.Redis, log_enabled: bool = True, log_start_enabled: bool | None = None
|
||||
) -> None:
|
||||
"""
|
||||
检查redis连接状态
|
||||
|
||||
:param redis: redis对象
|
||||
:param log_enabled: 是否输出日志
|
||||
:param log_start_enabled: 是否输出开始连接日志
|
||||
:return: None
|
||||
"""
|
||||
if log_start_enabled is None:
|
||||
log_start_enabled = log_enabled
|
||||
if log_start_enabled:
|
||||
logger.info('🔎 开始连接redis...')
|
||||
try:
|
||||
connection = await redis.ping()
|
||||
if not log_enabled:
|
||||
return
|
||||
if connection:
|
||||
logger.info('✅️ redis连接成功')
|
||||
else:
|
||||
logger.error('❌️ redis连接失败')
|
||||
except AuthenticationError as e:
|
||||
if log_enabled:
|
||||
logger.error(f'❌️ redis用户名或密码错误,详细错误信息:{e}')
|
||||
except RedisTimeoutError as e:
|
||||
if log_enabled:
|
||||
logger.error(f'❌️ redis连接超时,详细错误信息:{e}')
|
||||
except RedisError as e:
|
||||
if log_enabled:
|
||||
logger.error(f'❌️ redis连接错误,详细错误信息:{e}')
|
||||
|
||||
@classmethod
|
||||
async def close_redis_pool(cls, app: FastAPI) -> None:
|
||||
"""
|
||||
应用关闭时关闭redis连接
|
||||
|
||||
:param app: fastapi对象
|
||||
:return:
|
||||
"""
|
||||
await app.state.redis.close()
|
||||
logger.info('✅️ 关闭redis连接成功')
|
||||
|
||||
@classmethod
|
||||
async def init_sys_dict(cls, redis: FastAPI) -> None:
|
||||
"""
|
||||
应用启动时缓存字典表
|
||||
|
||||
:param redis: redis对象
|
||||
:return:
|
||||
"""
|
||||
async with AsyncSessionLocal() as session:
|
||||
await DictDataService.init_cache_sys_dict_services(session, redis)
|
||||
|
||||
@classmethod
|
||||
async def init_sys_config(cls, redis: aioredis.Redis) -> None:
|
||||
"""
|
||||
应用启动时缓存参数配置表
|
||||
|
||||
:param redis: redis对象
|
||||
:return:
|
||||
"""
|
||||
async with AsyncSessionLocal() as session:
|
||||
await ConfigService.init_cache_sys_config_services(session, redis)
|
||||
Reference in New Issue
Block a user