Connection refused 根本原因在于 TCP 连接被拒,90% 源于 Redis 未监听目标 IP/端口、bind 与 protected-mode 配置冲突、Spring Boot 配置项位置错误(应为 spring.data.redis.*)、防火墙阻断或 Docker/WSL2 网络配置不当。

Connection refused 不是 Spring Boot 的锅,而是 TCP 连接被拒 —— 说明客户端根本没连上 Redis 的端口。90% 的情况,问题不在代码,而在服务端监听、网络通路或配置错位。
Redis 服务没监听目标 IP 和端口
Spring Boot 配了 host: 192.168.1.100,但 Redis 只绑定了 127.0.0.1,或者压根没启动,就会报这个错。
- 先确认 Redis 进程是否真在跑:
ps aux | grep redis-server,看到类似redis-server *:6379才算启动成功 - 查它监听了哪些地址:
ss -tlnp | grep :6379(Linux)或netstat -ano | findstr :6379(Windows),输出里必须有你配的 IP 或*:6379 - 如果只看到
127.0.0.1:6379,说明 Redis 拒绝外部连接 —— 这不是 bug,是默认安全策略
redis.conf 中 bind 和 protected-mode 配置冲突
即使改了 bind,protected-mode yes 仍会拦截非本地连接,尤其在没设密码时。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 打开实际生效的
redis.conf(别改错文件!用redis-cli CONFIG GET dir查加载路径) - 把
bind 127.0.0.1改成bind 0.0.0.0或显式列出多个 IP,比如bind 192.168.1.100 127.0.0.1 - 必须设
protected-mode no;若要保留保护模式,就得配requirepass yourpass并在 Spring Boot 中填password - 改完执行
redis-cli CONFIG REWRITE再redis-cli shutdown,然后用redis-server /path/to/redis.conf重启
Spring Boot 配置项写错位置或格式错误
Spring Boot 2.4+ 之后,spring.redis.* 已废弃,必须用 spring.data.redis.*;YAML 缩进错一格,整个配置就失效。
- 正确结构是:
spring: data: redis: host: 192.168.1.100 port: 6379 password: mypass timeout: 3000 - 别写成
spring: redis: host: ...—— 这会静默忽略,降级为默认 localhost:6379 - Docker 环境下,
host别写localhost,要用宿主机网关 IP 或host.docker.internal - 检查
timeout:设成0会导致 Lettuce 死等,建议设3000(3 秒)
防火墙或虚拟网络阻断了 6379 端口
Linux 防火墙、云服务器安全组、WSL2 虚拟网卡桥接、VMware NAT 模式都可能拦住连接。
- 临时放行(测试用):
sudo ufw allow 6379(Ubuntu)或sudo firewall-cmd --add-port=6379/tcp --permanent && sudo firewall-cmd --reload(CentOS) - 云服务器(如阿里云)务必检查安全组规则,入方向加一条 TCP:6379
- WSL2 下,
host填localhost会失败,得用 Windows 主机真实 IP,并确保 Windows 防火墙放行该端口 - 用
telnet 192.168.1.100 6379测试 —— 如果连不上,Spring Boot 肯定也连不上;连得上但返回-DENIED Redis is running in protected mode,说明配置还没生效
真正麻烦的不是改哪一行配置,而是搞清「谁在监听」「谁在请求」「中间哪层拦了」。每次改完都该用 telnet 或 redis-cli -h x.x.x.x -p 6379 ping 验证通路,而不是直接跑 Spring Boot —— 否则你会在日志里反复看到同一个 Connection refused,却不知道问题早该在 Redis 侧终结。

















