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

Spring Webflux连接Azure Redis报错:readAddress(..) failed: Connection reset by peer

排查思路

1. 修正连接地址的明显错误

看错误日志里的连接地址是hostname.redis.cache.windows.net/:6380,多了一个多余的斜杠。先检查你的配置文件spring.data.redis.host是否末尾带了斜杠,或者代码中redisHostName变量是否被错误拼接了斜杠。Azure Redis的主机名应该是纯域名格式,比如xxx.redis.cache.windows.net,不带任何路径后缀。

2. 细化SSL配置适配Azure Redis要求

Azure Redis强制要求使用TLS 1.2或更高版本,虽然你代码里调用了.useSsl(),但可以明确指定SSL协议版本,避免Lettuce默认使用不兼容的协议:

val clientConfig = LettucePoolingClientConfiguration.builder()
    // 保留原有其他配置
    .useSsl()
    .sslProtocol(SslProtocol.TLSv1_2) // 指定TLS 1.2协议
    .build()

如果是测试环境排查,可临时禁用hostname验证(不推荐生产环境)来排除证书验证问题:

.sslOptions(SslOptions.builder().disablePeerVerification().build())

3. 调整连接池配置降低初始化压力

你当前的连接池配置中maxIdle和minIdle都设为50,接近maxTotal的一半,可能导致初始化时就尝试创建大量连接,触发Azure Redis的连接数配额限制。先简化配置排查:

protected fun buildLettucePoolConfig(): GenericObjectPoolConfig<Any> {
    val poolConfig = GenericObjectPoolConfig<Any>()
    poolConfig.maxTotal = 10
    poolConfig.maxIdle = 5
    poolConfig.minIdle = 2
    poolConfig.maxWait = Duration.ofMillis(10000)
    return poolConfig
}

同时去掉手动调用的.afterPropertiesSet(),LettuceConnectionFactory会在Spring初始化流程中自动完成初始化,手动调用可能导致提前创建连接池引发异常。

4. 换用RedisURI方式配置连接

直接用Azure Redis标准URI格式配置,可避免零散配置项遗漏:

@Bean
@Primary
fun reactiveRedisConnectionFactory(): ReactiveRedisConnectionFactory {
    // 注意URI前缀是rediss(带s表示SSL)
    val redisUri = RedisURI.create("rediss://:${redisPassword}@${redisHostName}:${redisPort}")
    val clientConfig = LettucePoolingClientConfiguration.builder()
        .commandTimeout(Duration.ofSeconds(60))
        .poolConfig(buildLettucePoolConfig())
        .build()
    return LettuceConnectionFactory(redisUri, clientConfig)
}

5. 确认应用环境的网络连通性

虽然本地CLI能连接,但要确认Spring Boot应用运行环境的网络是否和CLI一致:

  • 如果应用在容器或云服务中,检查网络安全组(NSG)是否允许6380端口的出站流量
  • 在应用环境执行nslookup hostname.redis.cache.windows.net,确认DNS解析到正确的IP
  • 用nc -zv hostname.redis.cache.windows.net 6380测试端口连通性

6. 检查版本兼容性

不同Spring Boot版本对应的Lettuce版本可能存在TLS或Azure Redis兼容性问题:

  • 确认Spring Boot版本(建议2.7.x及以上)对应的Lettuce版本是否支持TLS 1.2
  • 若使用较旧版本,尝试升级Lettuce依赖到最新稳定版

7. 开启Debug日志定位细节

添加日志配置查看连接过程的详细错误:
在application.properties中添加:

logging.level.io.lettuce=DEBUG
logging.level.org.springframework.data.redis=DEBUG

通过Debug日志可以看到SSL握手、认证步骤的具体失败环节,帮助定位根因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:44:52