kinit/kinit-api/utils/cache.py
ktianc c65ff06918 版本升级:
1. 修复(kinit-api):utils/cache.py 日志模块导入问题修复
2. 修复(kinit-api):token解析失败会报错问题修复
3. 优化(kinit-api):用户登录认证失败返回值优化
4. 优化(kinit-api):获取redis方式统一改为redis_getter(request)
5. 优化(kini-api):文件IO修改为异步操作
6. 优化(kinit-api):关联创建人时将user_id改为create_user_id
7. 文档(kinit-api):kinit-api/README.md 加入查询数据文档
8. 修复(kinit-admin):用户无法导出问题修复
9. 优化(kinit-admin):角色新增与编辑框使用默认父子联动
10. 更新(kinit-admin):usePermissionStore 改为 useRouterStoreWithOut,因为此文件主要记录路由
11. 更新(kinit-admin):取消用户信息的持久化存储,改为仅保存在pinia store共享中,并添加roles,permissions信息
12. 修复(kinit-admin):菜单新增与编辑框,目录与菜单切换时会出现抖动问题修复
13. 优化(kinit-admin):src\hooks\web\useTable.ts 优化删除数据方法
14. 优化(kinit-admin):config/services.ts 新增返回403状态码时直接退出系统
15. 优化(kinit-admin):将store中的本文件使用store调用的,改为this
16. 更新(kinit-admin):路由拦截更新
17. 更新(kinit-api,kinit-admin,kinit-uni):取消接口地址最后面的 /
2023-05-14 23:21:00 +08:00

56 lines
1.9 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# @version : 1.0
# @Create Time : 2022/3/21 11:03
# @File : cache.py
# @IDE : PyCharm
# @desc : 缓存
from typing import List
from core.logger import logger
from core.database import db_getter
from apps.vadmin.system.crud import SettingsTabDal
import json
from aioredis.client import Redis
from core.exception import CustomException
from utils import status
class Cache:
DEFAULT_TAB_NAMES = ["wx_server", "aliyun_sms", "aliyun_oss", "web_email"]
def __init__(self, rd: Redis):
self.rd = rd
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)
for k, v in datas.items():
await self.rd.client().set(k, json.dumps(v))
async def get_tab_name(self, tab_name: str, retry: int = 3):
"""
获取系统配置
:params tab_name: 配置表标签名称
:params retry_num: 重试次数
"""
result = await self.rd.get(tab_name)
if not result and retry > 0:
logger.error(f"未从Redis中获取到{tab_name}配置信息,正在重新更新配置信息,重试次数:{retry}")
await self.cache_tab_names([tab_name])
return await self.get_tab_name(tab_name, retry - 1)
elif not result and retry == 0:
raise CustomException(f"获取{tab_name}配置信息失败,请联系管理员!", code=status.HTTP_ERROR)
else:
return json.loads(result)