使用Python Redis库时如何解决"ConnectionError: Error 111 connecting to localhost:6379. Connection refuse

一、错误现象深度解析

当开发者使用Python的redis-py库执行redis.Redis()redis.StrictRedis()连接时,经常遭遇以下典型报错:

ConnectionError: Error 111 connecting to localhost:6379. Connection refused

这个错误表明Python客户端无法与Redis服务端建立TCP连接。本质上是一个网络层的通信失败,可能涉及多个维度的配置问题。

二、7大核心解决方案

1. 验证Redis服务状态

首先检查Redis服务是否正在运行:

sudo systemctl status redis-server
ps aux | grep redis

如果没有运行,需要启动服务:

sudo systemctl start redis-server

2. 检查绑定地址配置

查看/etc/redis/redis.conf配置文件:

  • bind 127.0.0.1 - 仅允许本地连接
  • bind 0.0.0.0 - 允许所有IP连接
  • protected-mode yes - 保护模式状态

3. 防火墙规则检查

Ubuntu系统需要开放6379端口:

sudo ufw allow 6379/tcp
sudo ufw reload

4. 连接参数验证

Python连接代码应包含正确参数:

r = redis.Redis(
    host='实际IP',
    port=6379,
    password='yourpassword',
    socket_connect_timeout=5
)

5. 测试网络连通性

使用telnet测试基础连接:

telnet localhost 6379

如果失败说明网络层存在问题。

6. SELinux策略调整

在CentOS/RHEL系统中可能需要:

sudo setsebool -P redis_connect_any 1

7. 多环境配置差异

注意开发、测试、生产环境的配置差异:

  • Docker容器需要暴露端口
  • Kubernetes环境需要Service配置
  • 云服务器需要安全组规则

三、高级调试技巧

使用redis-cli监控命令:

redis-cli monitor

检查Redis日志文件:

tail -f /var/log/redis/redis-server.log

四、预防性最佳实践

  1. 实现连接池管理
  2. 配置合理的超时参数
  3. 使用健康检查机制
  4. 实施自动化监控