M1 Mac启动SpringBoot报Redisson无法初始化足够Redis连接异常
问题根因
- 连接配置与网络链路不匹配:Redisson单节点模式默认最小空闲连接数为24,当前配置中连接超时仅设置为2000ms。本地通过Telepresence代理访问K8s集群内Redis时,链路比集群内网访问多了多层代理转发,网络延迟、TCP握手开销远高于内网场景,超时窗口内无法完成全部24个连接的初始化,就会抛出"Only 10 of 24 were initialized"的异常。另外当前配置使用单节点模式直连Redis主节点,2核配置的主节点本身并发处理建连请求的能力有限,跨网场景下更容易出现建连超时。
- Telepresence代理限流:Telepresence默认转发规则对单目标地址的并发TCP建连请求存在软限制,短时间内并发发起24个连接请求时,部分请求会被代理限流、丢包,导致连接建立失败。
- 低版本Redisson的架构兼容问题:3.17.0之前的Redisson版本在Apple Silicon(M系列)芯片上存在Netty原生传输层的兼容bug,会随机出现建连超时的问题。
修复方案
- 分环境调整Redisson配置:通过Spring Profile区分本地调试和生产环境的配置参数,本地调试场景下调低连接池大小、拉长超时时间,适配跨代理的网络状况,示例配置如下:
config.useSingleServer() .setAddress("redis://" + redisHost + ":" + redisPort) .setPassword(redisPwd) .setTimeout(5000) .setDatabase(1) .setConnectionMinimumIdleSize(5) .setConnectionPoolSize(10) .setConnectTimeout(10000);
生产环境部署在K8s集群内部时,保持原有高连接池、低超时的内网优化配置即可,不会影响线上性能。
- 优化Telepresence转发规则:启动Telepresence时添加
--also-proxy 10.108.0.0/16(替换为实际K8s集群的Service网段)参数,确保Redis相关流量全部走代理通道,不会被本地路由规则拦截丢包。 - 升级Redisson版本:将Redisson依赖升级到3.17.1及以上版本,修复M系列芯片下的传输层兼容问题。
验证步骤
- 重启Spring Boot服务,观察启动日志,无Redisson连接初始化报错即为启动正常
- 启动完成后执行简单的Redis读写测试,确认set/get操作正常,连接池运行稳定
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

