perf:缓存系统配置功能优化

This commit is contained in:
ktianc 2023-06-19 15:33:46 +08:00
parent c3da50cdfb
commit 56fda7d2be

View File

@ -7,9 +7,11 @@
# @desc : 缓存 # @desc : 缓存
from typing import List from typing import List
from core.logger import logger from sqlalchemy.future import select
from sqlalchemy.orm import joinedload
from core.logger import logger # 注意:报错就在这里,如果只写 core.logger 会写入日志报错,很难排查
from core.database import db_getter from core.database import db_getter
from apps.vadmin.system.crud import SettingsTabDal from apps.vadmin.system.models import VadminSystemSettingsTab
import json import json
from aioredis.client import Redis from aioredis.client import Redis
from core.exception import CustomException from core.exception import CustomException
@ -23,18 +25,49 @@ class Cache:
def __init__(self, rd: Redis): def __init__(self, rd: Redis):
self.rd = rd self.rd = rd
async def __get_tab_name_values(self, tab_names: List[str], hidden: bool | None = False):
"""
获取系统配置标签下的标签信息
"""
async_session = db_getter()
session = await async_session.__anext__()
model = VadminSystemSettingsTab
v_options = [joinedload(model.settings)]
sql = select(model).where(
model.is_delete == False,
model.tab_name.in_(tab_names),
model.disabled == False,
model.hidden == hidden
).options(*[load for load in v_options])
queryset = await session.execute(sql)
datas = queryset.scalars().unique().all()
return self.__generate_values(datas)
@classmethod
def __generate_values(cls, datas: List[VadminSystemSettingsTab]):
"""
生成字典值
"""
return {
tab.tab_name: {
item.config_key: item.config_value
for item in tab.settings
if not item.disabled
}
for tab in datas
}
async def cache_tab_names(self, tab_names: List[str] = None): async def cache_tab_names(self, tab_names: List[str] = None):
""" """
缓存系统配置 缓存系统配置
如果手动修改了mysql数据库中的配置 如果手动修改了mysql数据库中的配置
那么需要在redis中将对应的tab_name删除 那么需要在redis中将对应的tab_name删除
""" """
async_session = db_getter()
session = await async_session.__anext__() if not tab_names:
if tab_names: tab_names = self.DEFAULT_TAB_NAMES
datas = await SettingsTabDal(session).get_tab_name_values(tab_names, hidden=None) datas = await self.__get_tab_name_values(tab_names, None)
else:
datas = await SettingsTabDal(session).get_tab_name_values(self.DEFAULT_TAB_NAMES, hidden=None)
for k, v in datas.items(): for k, v in datas.items():
await self.rd.client().set(k, json.dumps(v)) await self.rd.client().set(k, json.dumps(v))