feat: 初始化仓库
This commit is contained in:
68
config/get_redis.py
Normal file
68
config/get_redis.py
Normal file
@@ -0,0 +1,68 @@
|
||||
# _*_ coding : UTF-8 _*_
|
||||
# @Time : 2025/01/18 02:41
|
||||
# @UpdateTime : 2025/01/18 02:41
|
||||
# @Author : sonder
|
||||
# @File : get_redis.py
|
||||
# @Software : PyCharm
|
||||
# @Comment : 本程序
|
||||
|
||||
from redis import asyncio as aioredis
|
||||
from redis.exceptions import AuthenticationError, TimeoutError, RedisError
|
||||
|
||||
from config.env import RedisConfig
|
||||
from utils.log import logger
|
||||
|
||||
|
||||
class Redis:
|
||||
"""
|
||||
Redis工具类
|
||||
提供与 Redis 交互的常用方法,包括连接管理和缓存初始化。
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
async def create_redis_pool(cls) -> aioredis.Redis:
|
||||
"""
|
||||
应用启动时初始化 Redis 连接池。
|
||||
|
||||
该方法通过 `aioredis` 创建一个 Redis 连接池,并验证连接是否成功。
|
||||
如果连接失败,会捕获异常并记录错误日志。
|
||||
|
||||
:return: Redis 连接对象
|
||||
"""
|
||||
logger.info('开始连接 Redis...')
|
||||
redis = await aioredis.from_url(
|
||||
url=f'redis://{RedisConfig.redis_host}',
|
||||
port=RedisConfig.redis_port,
|
||||
username=RedisConfig.redis_username,
|
||||
password=RedisConfig.redis_password,
|
||||
db=RedisConfig.redis_database,
|
||||
encoding='utf-8', # 默认编码为 UTF-8
|
||||
decode_responses=True, # 自动解码 Redis 响应
|
||||
)
|
||||
try:
|
||||
# 测试 Redis 连接
|
||||
connection = await redis.ping()
|
||||
if connection:
|
||||
logger.info('Redis 连接成功')
|
||||
else:
|
||||
logger.error('Redis 连接失败')
|
||||
except AuthenticationError as e:
|
||||
logger.error(f'Redis 用户名或密码错误,详细错误信息:{e}')
|
||||
except TimeoutError as e:
|
||||
logger.error(f'Redis 连接超时,详细错误信息:{e}')
|
||||
except RedisError as e:
|
||||
logger.error(f'Redis 连接错误,详细错误信息:{e}')
|
||||
return redis
|
||||
|
||||
@classmethod
|
||||
async def close_redis_pool(cls, app):
|
||||
"""
|
||||
应用关闭时关闭 Redis 连接池。
|
||||
|
||||
在应用生命周期结束时,清理 Redis 连接池以释放资源。
|
||||
|
||||
:param app: FastAPI 应用对象,用于访问全局 Redis 连接池。
|
||||
:return: None
|
||||
"""
|
||||
await app.state.redis.close()
|
||||
logger.info('关闭 Redis 连接成功')
|
||||
Reference in New Issue
Block a user