first commit

This commit is contained in:
2026-02-06 17:21:11 +08:00
commit 16d03c47d3
9 changed files with 716 additions and 0 deletions

66
servers/redis/server.py Normal file
View File

@@ -0,0 +1,66 @@
from typing import Optional
from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict
from redis.asyncio import Redis
from servers.base import BaseService
class RedisSettings(BaseSettings):
"""
Redis服务配置类
"""
model_config = SettingsConfigDict(
env_prefix="redis_",
case_sensitive=False,
extra="ignore",
)
url: Optional[str] = Field(None, description="Redis连接URL")
host: Optional[str] = Field(None, description="Redis主机地址")
port: Optional[int] = Field(6379, description="Redis端口号")
db: Optional[int] = Field(0, description="Redis数据库索引")
password: Optional[str] = Field(None, description="Redis密码")
class RedisService(BaseService[Redis]):
"""
Redis服务类,定义了Redis服务的基本状态和操作
"""
service_name: str = "redis"
async def _initialize(self) -> Redis:
"""
初始化Redis服务
"""
setting = RedisSettings()
if not setting.url or not setting.host:
raise ValueError("Redis连接URL或主机地址不能为空")
if setting.url:
return Redis.from_url(setting.url)
return Redis(
host=setting.host,
port=setting.port,
db=setting.db,
password=setting.password,
)
async def _shutdown(self) -> None:
"""
关闭Redis服务
"""
if not self._instance:
return
await self._instance.aclose()
async def _check_health(self) -> bool:
"""
检查Redis服务健康状态
"""
if not self._instance:
return False
await self._instance.ping()
return True
redis_service = RedisService()
__all__ = [
"redis_service",
]