perf:缓存系统配置功能优化
This commit is contained in:
parent
c3da50cdfb
commit
56fda7d2be
@ -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))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user