perf:缓存系统配置功能优化
This commit is contained in:
parent
c3da50cdfb
commit
56fda7d2be
@ -7,9 +7,11 @@
|
||||
# @desc : 缓存
|
||||
|
||||
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 apps.vadmin.system.crud import SettingsTabDal
|
||||
from apps.vadmin.system.models import VadminSystemSettingsTab
|
||||
import json
|
||||
from aioredis.client import Redis
|
||||
from core.exception import CustomException
|
||||
@ -23,18 +25,49 @@ class Cache:
|
||||
def __init__(self, rd: Redis):
|
||||
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):
|
||||
"""
|
||||
缓存系统配置
|
||||
如果手动修改了mysql数据库中的配置
|
||||
那么需要在redis中将对应的tab_name删除
|
||||
"""
|
||||
async_session = db_getter()
|
||||
session = await async_session.__anext__()
|
||||
if tab_names:
|
||||
datas = await SettingsTabDal(session).get_tab_name_values(tab_names, hidden=None)
|
||||
else:
|
||||
datas = await SettingsTabDal(session).get_tab_name_values(self.DEFAULT_TAB_NAMES, hidden=None)
|
||||
|
||||
if not tab_names:
|
||||
tab_names = self.DEFAULT_TAB_NAMES
|
||||
datas = await self.__get_tab_name_values(tab_names, None)
|
||||
|
||||
for k, v in datas.items():
|
||||
await self.rd.client().set(k, json.dumps(v))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user