You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cloud Run中通过redis.StrictRedis创建带认证的Google Cloud Redis连接池

解决方案:Cloud Run中带SSL认证的Redis连接池配置

错误原因分析

  1. 第一种写法报错是因为ConnectionPool构造函数不直接支持ssl、ssl_cert_reqs这类SSL相关参数——这些参数属于底层连接对象的配置,而非连接池本身的参数。
  2. 第二种拆分写法出现连接重置,是因为连接池创建的是非SSL连接,但客户端强制要求SSL,导致与Google Cloud Redis的SSL要求不匹配,被服务端主动断开。

正确实现方式

方式1:显式指定SSL连接类并传递认证参数

通过connection_class指定使用SSL连接,同时用connection_kwargs传递SSL认证所需的参数:

from redis import StrictRedis, ConnectionPool, SSLConnection

# 创建带SSL配置的连接池
pool = ConnectionPool(
    host=redis_webhooks_host,
    port=redis_webhooks_port,
    password=redis_webhooks_authstring,
    db=1,
    # 指定使用SSL连接类
    connection_class=SSLConnection,
    # 传递SSL认证相关参数
    connection_kwargs={
        "ssl_cert_reqs": "required",
        "ssl_ca_certs": f"/tmp/{redis_webhooks_server_ca_pem_name}"
    },
    # 连接池性能配置(可选)
    max_connections=100,
    socket_timeout=5,
    retry_on_timeout=True
)

# 通过连接池初始化Redis客户端
redis_webhooks_client = StrictRedis(connection_pool=pool)

方式2:使用rediss://URL简化配置

利用rediss://协议自动启用SSL,通过URL查询字符串传递认证参数,再用ConnectionPool.from_url解析配置:

from redis import StrictRedis, ConnectionPool

# 构造Redis SSL连接URL
redis_ssl_url = (
    f"rediss://:{redis_webhooks_authstring}@{redis_webhooks_host}:{redis_webhooks_port}/1"
    f"?ssl_cert_reqs=required&ssl_ca_certs=/tmp/{redis_webhooks_server_ca_pem_name}"
)

# 从URL创建连接池
pool = ConnectionPool.from_url(
    redis_ssl_url,
    max_connections=100,
    socket_timeout=5,
    retry_on_timeout=True
)

# 初始化客户端
redis_webhooks_client = StrictRedis(connection_pool=pool)

注意事项

  • 确保你的redis-py版本≥3.0(支持SSLConnection和connection_kwargs参数),如果版本过低建议升级。
  • 确认Cloud Run服务有权限访问Google Cloud Redis实例(需配置VPC连接器或将Cloud Run的出站IP加入Redis的授权网络)。
  • 验证/tmp/{redis_webhooks_server_ca_pem_name}路径下的CA证书文件存在且可读(Cloud Run的临时目录可正常访问)。

内容的提问来源于stack exchange,提问作者Luke_V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:02:52