a
This commit is contained in:
parent
4a84f5e6ad
commit
db953471b3
|
|
@ -77,6 +77,31 @@ class ConfigManager:
|
|||
redis_username = os.getenv('REDIS_USERNAME', None)
|
||||
redis_password = os.getenv('REDIS_PASSWORD', None)
|
||||
|
||||
<<<<<<< Current (Your changes)
|
||||
=======
|
||||
# 验证URL格式
|
||||
if not redis_url or not isinstance(redis_url, str):
|
||||
logger.warning(f"Redis URL无效: {redis_url},使用默认值")
|
||||
redis_url = 'redis://localhost:6379'
|
||||
|
||||
# 如果使用TLS但URL不是rediss://,自动转换
|
||||
if redis_use_tls and not redis_url.startswith('rediss://'):
|
||||
if redis_url.startswith('redis://'):
|
||||
redis_url = redis_url.replace('redis://', 'rediss://', 1)
|
||||
else:
|
||||
# 如果URL格式不正确,构建新的URL
|
||||
logger.warning(f"Redis URL格式不正确且需要TLS: {redis_url},尝试构建rediss://URL")
|
||||
# 尝试从URL中提取主机和端口
|
||||
if '://' in redis_url:
|
||||
parts = redis_url.split('://', 1)
|
||||
host_port = parts[1].split('/')[0] if '/' in parts[1] else parts[1]
|
||||
redis_url = f"rediss://{host_port}"
|
||||
else:
|
||||
# 如果完全没有scheme,添加rediss://
|
||||
redis_url = f"rediss://{redis_url}"
|
||||
logger.info(f"已自动转换Redis URL为TLS格式: {redis_url}")
|
||||
|
||||
>>>>>>> Incoming (Background Agent changes)
|
||||
# 解析Redis URL
|
||||
if redis_url.startswith('rediss://') or redis_use_tls:
|
||||
# TLS连接
|
||||
|
|
|
|||
|
|
@ -48,7 +48,29 @@ class RedisCache:
|
|||
username: Redis 用户名(如果 URL 中未包含)
|
||||
password: Redis 密码(如果 URL 中未包含)
|
||||
"""
|
||||
self.redis_url = redis_url or "redis://localhost:6379"
|
||||
# 验证和规范化Redis URL
|
||||
if not redis_url or not isinstance(redis_url, str):
|
||||
logger.warning(f"Redis URL无效: {redis_url},使用默认值")
|
||||
redis_url = "redis://localhost:6379"
|
||||
|
||||
# 如果使用TLS但URL不是rediss://,自动转换
|
||||
if use_tls and not redis_url.startswith('rediss://'):
|
||||
if redis_url.startswith('redis://'):
|
||||
redis_url = redis_url.replace('redis://', 'rediss://', 1)
|
||||
logger.info(f"已自动转换Redis URL为TLS格式: {redis_url}")
|
||||
else:
|
||||
# 如果URL格式不正确,构建新的URL
|
||||
logger.warning(f"Redis URL格式不正确且需要TLS: {redis_url},尝试构建rediss://URL")
|
||||
if '://' in redis_url:
|
||||
parts = redis_url.split('://', 1)
|
||||
host_port = parts[1].split('/')[0] if '/' in parts[1] else parts[1]
|
||||
redis_url = f"rediss://{host_port}"
|
||||
else:
|
||||
# 如果完全没有scheme,添加rediss://
|
||||
redis_url = f"rediss://{redis_url}"
|
||||
logger.info(f"已构建Redis TLS URL: {redis_url}")
|
||||
|
||||
self.redis_url = redis_url
|
||||
self.use_tls = use_tls or self.redis_url.startswith('rediss://')
|
||||
self.ssl_cert_reqs = ssl_cert_reqs
|
||||
self.ssl_ca_certs = ssl_ca_certs
|
||||
|
|
@ -120,6 +142,12 @@ class RedisCache:
|
|||
connection_kwargs['password'] = self.password
|
||||
logger.info(f"URL 格式异常,使用独立的用户名和密码进行认证: {self.username}")
|
||||
|
||||
# 验证URL格式(redis-py要求URL必须有正确的scheme)
|
||||
if not self.redis_url or not any(self.redis_url.startswith(scheme) for scheme in ['redis://', 'rediss://', 'unix://']):
|
||||
raise ValueError(
|
||||
f"Redis URL必须指定以下scheme之一 (redis://, rediss://, unix://): {self.redis_url}"
|
||||
)
|
||||
|
||||
# 创建 Redis 连接
|
||||
# 使用 redis.asyncio.from_url(redis-py 4.2+)或 aioredis.from_url(向后兼容)
|
||||
# redis-py 需要 decode_responses=True,aioredis 2.0 可能不需要
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user