feat(redis): refactor Redis configuration to use multiple logical databases
- Updated default REDIS_URL to remove explicit /0 suffix - Added dedicated Redis clients: - db0: general cache (redis_client) - db1: message cache (redis_message_client) - db2: binary storage (redis_binary_client) - db3: rate limiting (redis_rate_limit_client) - Updated configuration, Docker files, and main startup lifecycle accordingly - Replaced `get_redis()` usage in notification server with `redis_message_client`
This commit is contained in:
@@ -141,7 +141,7 @@ STORAGE_SETTINGS='{
|
||||
]
|
||||
redis_url: Annotated[
|
||||
str,
|
||||
Field(default="redis://127.0.0.1:6379/0", description="Redis 连接 URL"),
|
||||
Field(default="redis://127.0.0.1:6379", description="Redis 连接 URL"),
|
||||
"数据库设置",
|
||||
]
|
||||
|
||||
|
||||
@@ -35,13 +35,16 @@ engine = create_async_engine(
|
||||
)
|
||||
|
||||
# Redis 连接
|
||||
redis_client = redis.from_url(settings.redis_url, decode_responses=True)
|
||||
|
||||
# Redis 二进制数据连接 (不自动解码响应,用于存储音频等二进制数据)
|
||||
redis_binary_client = redis.from_url(settings.redis_url, decode_responses=False)
|
||||
redis_client = redis.from_url(settings.redis_url, decode_responses=True, db=0)
|
||||
|
||||
# Redis 消息缓存连接 (db1)
|
||||
redis_message_client: redis.Redis = redis.from_url(settings.redis_url, decode_responses=True, db=1)
|
||||
redis_message_client = redis.from_url(settings.redis_url, decode_responses=True, db=1)
|
||||
|
||||
# Redis 二进制数据连接 (不自动解码响应,用于存储音频等二进制数据,db2)
|
||||
redis_binary_client = redis.from_url(settings.redis_url, decode_responses=False, db=2)
|
||||
|
||||
# Redis 限流连接 (db3)
|
||||
redis_rate_limit_client = redis.from_url(settings.redis_url, decode_responses=True, db=3)
|
||||
|
||||
|
||||
# 数据库依赖
|
||||
|
||||
@@ -8,7 +8,7 @@ from app.dependencies.database import (
|
||||
DBFactory,
|
||||
Redis,
|
||||
get_db_factory,
|
||||
get_redis,
|
||||
redis_message_client,
|
||||
with_db,
|
||||
)
|
||||
from app.dependencies.user import get_current_user_and_token
|
||||
@@ -31,7 +31,7 @@ class ChatServer:
|
||||
def __init__(self):
|
||||
self.connect_client: dict[int, WebSocket] = {}
|
||||
self.channels: dict[int, list[int]] = {}
|
||||
self.redis: Redis = get_redis()
|
||||
self.redis: Redis = redis_message_client
|
||||
|
||||
self.tasks: set[asyncio.Task] = set()
|
||||
self.ChatSubscriber = ChatSubscriber()
|
||||
|
||||
Reference in New Issue
Block a user