perf: 增加redis 和 mysql 连接配置生成
This commit is contained in:
parent
bdb665cf47
commit
0e966586b5
|
|
@ -11,7 +11,7 @@ MYSQL_PASSWORD=123456
|
||||||
MYSQL_DB=mall
|
MYSQL_DB=mall
|
||||||
|
|
||||||
# redis
|
# redis
|
||||||
REDIS_ADDRESS=localhost:6379
|
REDIS_ADDRESS=127.0.0.1:6379
|
||||||
|
|
||||||
#rabbitMQ
|
#rabbitMQ
|
||||||
RABBITMQ_ADDRESS=localhost:5672
|
RABBITMQ_ADDRESS=localhost:5672
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,32 @@
|
||||||
import secrets
|
import secrets
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from typing import Dict
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from pydantic import BaseSettings, HttpUrl
|
from pydantic import BaseSettings
|
||||||
|
from pydantic import HttpUrl
|
||||||
|
from pydantic import validator
|
||||||
|
from pydantic import AnyUrl
|
||||||
|
|
||||||
|
|
||||||
|
class MysqlDsn(AnyUrl):
|
||||||
|
allowed_schemes = {'mysql'}
|
||||||
|
user_required = True
|
||||||
|
|
||||||
|
|
||||||
|
class RedisDsn(AnyUrl):
|
||||||
|
allowed_schemes = {'redis'}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def validate_parts(cls, parts: Dict[str, str]) -> Dict[str, str]:
|
||||||
|
defaults = {
|
||||||
|
'domain': 'localhost' if not (parts['ipv4'] or parts['ipv6']) else '',
|
||||||
|
'port': '6379'
|
||||||
|
}
|
||||||
|
for key, value in defaults.items():
|
||||||
|
if not parts[key]:
|
||||||
|
parts[key] = value
|
||||||
|
return super().validate_parts(parts)
|
||||||
|
|
||||||
|
|
||||||
class Settings(BaseSettings):
|
class Settings(BaseSettings):
|
||||||
|
|
@ -18,9 +43,33 @@ class Settings(BaseSettings):
|
||||||
MYSQL_USER: str
|
MYSQL_USER: str
|
||||||
MYSQL_PASSWORD: str
|
MYSQL_PASSWORD: str
|
||||||
MYSQL_DB: str
|
MYSQL_DB: str
|
||||||
|
MYSQL_DATABASE_URL: Optional[MysqlDsn] = None
|
||||||
|
|
||||||
|
@validator("MYSQL_DATABASE_URL", pre=True)
|
||||||
|
def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any:
|
||||||
|
if isinstance(v, str):
|
||||||
|
return v
|
||||||
|
return MysqlDsn.build(
|
||||||
|
scheme="mysql",
|
||||||
|
user=values.get("MYSQL_USER"),
|
||||||
|
password=values.get("MYSQL_PASSWORD"),
|
||||||
|
host=values.get("MYSQL_ADDRESS"),
|
||||||
|
path=f"/{values.get('MYSQL_DB') or ''}",
|
||||||
|
)
|
||||||
|
|
||||||
# redis, ip + 端口
|
# redis, ip + 端口
|
||||||
REDIS_ADDRESS: str
|
REDIS_ADDRESS: str
|
||||||
|
REDIS_URL: Optional[RedisDsn] = None
|
||||||
|
|
||||||
|
@validator("REDIS_URL", pre=True)
|
||||||
|
def assemble_redis_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any:
|
||||||
|
if isinstance(v, str):
|
||||||
|
return v
|
||||||
|
return RedisDsn.build(
|
||||||
|
scheme="redis",
|
||||||
|
host=values.get("REDIS_ADDRESS")
|
||||||
|
)
|
||||||
|
|
||||||
# rabbitMQ
|
# rabbitMQ
|
||||||
RABBITMQ_ADDRESS: str
|
RABBITMQ_ADDRESS: str
|
||||||
...
|
...
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import sentry_sdk
|
||||||
|
from sentry_sdk.integrations.asgi import SentryAsgiMiddleware
|
||||||
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
from common.config import settings
|
||||||
|
|
||||||
|
sentry_sdk.init(settings.SENTRY_DSN)
|
||||||
|
|
||||||
|
|
||||||
|
middlewares = [
|
||||||
|
SentryAsgiMiddleware,
|
||||||
|
CORSMiddleware(allow_origins=['*'], allow_methods=['*'], allow_headers=['*'])
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = [middlewares]
|
||||||
|
|
@ -3,8 +3,7 @@ from typing import List
|
||||||
from typing import NoReturn
|
from typing import NoReturn
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import sentry_sdk
|
|
||||||
from sentry_sdk.integrations.asgi import SentryAsgiMiddleware
|
|
||||||
from aioredis import Redis
|
from aioredis import Redis
|
||||||
from aioredis import from_url
|
from aioredis import from_url
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
|
|
@ -13,23 +12,6 @@ from tortoise.contrib.fastapi import register_tortoise
|
||||||
|
|
||||||
from common.config import settings
|
from common.config import settings
|
||||||
|
|
||||||
sentry_sdk.init(settings.SENTRY_DSN)
|
|
||||||
|
|
||||||
|
|
||||||
def mysql_cdn():
|
|
||||||
"""mysql cdn 完整地址"""
|
|
||||||
return f'mysql://{settings.MYSQL_USER}:{settings.MYSQL_PASSWORD}@{settings.MYSQL_ADDRESS}/{settings.MYSQL_DB}'
|
|
||||||
|
|
||||||
|
|
||||||
def redis_cdn():
|
|
||||||
"""redis cdn"""
|
|
||||||
return f'redis://{settings.REDIS_ADDRESS}'
|
|
||||||
|
|
||||||
|
|
||||||
def register_middleware(app: FastAPI):
|
|
||||||
"""注册 日志错误收集 中间件"""
|
|
||||||
app.add_middleware(SentryAsgiMiddleware)
|
|
||||||
|
|
||||||
|
|
||||||
def register_orm(app: FastAPI, modules: Optional[Dict[str, List[str]]] = None) -> NoReturn:
|
def register_orm(app: FastAPI, modules: Optional[Dict[str, List[str]]] = None) -> NoReturn:
|
||||||
"""注册orm"""
|
"""注册orm"""
|
||||||
|
|
@ -37,14 +19,14 @@ def register_orm(app: FastAPI, modules: Optional[Dict[str, List[str]]] = None) -
|
||||||
modules = {"models": ["models"]}
|
modules = {"models": ["models"]}
|
||||||
register_tortoise(
|
register_tortoise(
|
||||||
app,
|
app,
|
||||||
db_url=mysql_cdn(),
|
db_url=settings.MYSQL_DATABASE_URL,
|
||||||
modules=modules
|
modules=modules
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def redis_pool() -> Dict[int, Redis]:
|
def redis_pool() -> Dict[int, Redis]:
|
||||||
"""redis 16个db 每个创建池"""
|
"""redis 16个db 每个创建池"""
|
||||||
return {db: from_url(redis_cdn(), db=db, max_connections=10, encoding="utf-8", decode_responses=True)
|
return {db: from_url(settings.REDIS_URL, db=db, max_connections=10, encoding="utf-8", decode_responses=True)
|
||||||
for db in range(16)
|
for db in range(16)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,7 +56,7 @@ def register_redis(app: FastAPI):
|
||||||
# orm 迁移生成表
|
# orm 迁移生成表
|
||||||
# https://tortoise.github.io/migration.html
|
# https://tortoise.github.io/migration.html
|
||||||
TORTOISE_ORM = {
|
TORTOISE_ORM = {
|
||||||
"connections": {"default": mysql_cdn()},
|
"connections": {"default": settings.MYSQL_DATABASE_URL},
|
||||||
"apps": {
|
"apps": {
|
||||||
"models": {
|
"models": {
|
||||||
"models": ["models", "aerich.models"],
|
"models": ["models", "aerich.models"],
|
||||||
|
|
@ -82,3 +64,5 @@ TORTOISE_ORM = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue