fix: 修复reids缓存配置过期导致接口无法正常获取系统配置问题

This commit is contained in:
King
2025-05-22 13:00:48 +08:00
parent 560b8b7ee6
commit b41042492d
2 changed files with 17 additions and 10 deletions
@@ -5,13 +5,15 @@ from fastapi.responses import JSONResponse
from aioredis import Redis
from app.common.response import SuccessResponse
from app.core.dependencies import AuthPermission, redis_getter
from app.core.dependencies import AuthPermission, redis_getter, db_getter
from app.core.router_class import OperationLogRoute
from app.core.logger import logger
from app.api.v1.schemas.system.auth_schema import AuthSchema
from app.api.v1.schemas.system.config_schema import ConfigUpdateSchema
from app.api.v1.services.system.config_service import ConfigService
from sqlalchemy.ext.asyncio import AsyncSession
router = APIRouter(route_class=OperationLogRoute)
@@ -48,8 +50,9 @@ async def upload_file_controller(
@router.get("/init", summary="获取初始化配置", description="获取初始化配置")
async def get_init_config_controller(
redis: Redis = Depends(redis_getter)
redis: Redis = Depends(redis_getter),
db: AsyncSession = Depends(db_getter)
) -> JSONResponse:
result_dict = await ConfigService.get_init_config_service(redis=redis)
result_dict = await ConfigService.get_init_config_service(redis=redis, db=db)
logger.info(f"获取初始化配置成功 {result_dict}")
return SuccessResponse(data=result_dict, msg="获取初始化配置成功")
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
import json
from typing import Dict
from typing import Dict, Union
from aioredis import Redis
from fastapi import UploadFile
@@ -66,7 +66,7 @@ class ConfigService:
).model_dump()
@classmethod
async def init_config_service(cls, redis: Redis, db: AsyncSession)-> None:
async def init_config_service(cls, redis: Redis, db: AsyncSession) -> Union[str, None]:
auth = AuthSchema(db=db)
config_obj = await ConfigCRUD(auth).get_crud(id=1)
config_obj_dict = ConfigOutSchema.model_validate(config_obj).model_dump()
@@ -80,16 +80,20 @@ class ConfigService:
value=value,
expire=settings.ACCESS_TOKEN_EXPIRE_MINUTES * 60
)
return value
except Exception as e:
logger.error(f"初始化系统配置失败: {e}")
raise CustomException(msg="初始化系统配置失败")
@classmethod
async def get_init_config_service(cls, redis: Redis) -> Dict:
async def get_init_config_service(cls, redis: Redis, db: AsyncSession) -> Dict:
"""获取系统配置"""
redis_key = f"{RedisInitKeyConfig.System_Config.key}:{'init_system_config'}"
config_obj_list_dict = await RedisCURD(redis).get(redis_key)
if not config_obj_list_dict:
raise CustomException(msg="系统配置不存在")
return json.loads(config_obj_list_dict)
config_obj_str = await RedisCURD(redis).get(redis_key)
if not config_obj_str:
# 如果Redis中没有数据,则从数据库中获取
config_obj_str = await cls.init_config_service(redis=redis, db=db)
if not config_obj_str:
raise CustomException(msg="系统配置不存在")
return json.loads(config_obj_str)