Redis连接被拒绝(Connection refused)问题的完整解决指南
作者:Bruce_xiaowei
这篇文章主要介绍了Redis连接被拒绝问题的诊断和解决流程,涵盖了服务未运行、配置限制、防火墙阻挡、资源不足等常见原因,并提供了相应的解决方案和安全配置建议,需要的朋友可以参考下
问题现象
当尝试连接Redis时出现以下错误:
Could not connect to Redis at 192.168.1.48:6379: Connection refused
问题诊断流程
1. 基础状态检查
# 检查Redis服务状态 systemctl status redis # 检查Redis是否安装 redis-server --version redis-cli --version which redis-server # 检查Redis进程 ps aux | grep redis pgrep -lf redis # 检查端口监听状态 netstat -tlnp | grep 6379 ss -tlnp | grep 6379
2. 连接测试
# 本地连接测试 redis-cli ping # 远程连接测试 redis-cli -h 目标IP ping
常见原因及解决方案
情况一:Redis服务未安装
症状:redis-server --version命令无输出
解决方案:
# Ubuntu/Debian sudo apt update && sudo apt install redis-server # CentOS/RHEL sudo yum install redis # 或 sudo dnf install redis
情况二:Redis服务未启动
症状:服务已安装但进程不存在
解决方案:
# 临时启动Redis redis-server --daemonize yes # 或使用配置文件启动 redis-server /etc/redis/redis.conf # 创建系统服务(推荐) sudo systemctl enable redis sudo systemctl start redis
情况三:配置限制
症状:本地可连接,远程无法连接
解决方案:
编辑Redis配置文件 /etc/redis/redis.conf:
# 允许远程连接 bind 0.0.0.0 # 关闭保护模式(测试环境) protected-mode no # 设置密码(可选) requirepass yourpassword # 后台运行 daemonize yes
重启服务使配置生效:
sudo systemctl restart redis # 或 pkill redis-server && redis-server /etc/redis/redis.conf
情况四:防火墙阻挡
症状:服务运行正常但无法连接
解决方案:
# 检查防火墙状态 sudo ufw status sudo iptables -L # 开放Redis端口 sudo ufw allow 6379 # 或 sudo iptables -A INPUT -p tcp --dport 6379 -j ACCEPT # 永久保存iptables规则 sudo service iptables save # CentOS # 或安装iptables-persistent (Ubuntu/Debian)
情况五:服务配置问题
创建完整的systemd服务文件:
sudo cat > /etc/systemd/system/redis.service << EOF [Unit] Description=Redis In-Memory Data Store After=network.target [Service] Type=forking ExecStart=/usr/bin/redis-server /etc/redis/redis.conf ExecStop=/usr/bin/redis-cli shutdown Restart=always User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target EOF
启用服务:
sudo systemctl daemon-reload sudo systemctl enable redis sudo systemctl start redis
高级排查技巧
1. 查看Redis日志
# 查看系统日志 sudo journalctl -u redis # 或查看Redis日志文件 sudo tail -f /var/log/redis/redis-server.log
2. 检查资源限制
# 检查内存 free -h # 检查磁盘空间 df -h # 检查文件描述符限制 ulimit -n
3. 网络诊断
# 测试端口连通性 telnet 目标IP 6379 nc -zv 目标IP 6379 # 检查端口占用 sudo lsof -i :6379
4. 配置验证
# 检查配置文件语法 redis-check-rdb /etc/redis/redis.conf # 测试配置 redis-server /etc/redis/redis.conf --test
安全配置建议
1. 生产环境安全设置
# 在redis.conf中设置 requirepass 强密码 rename-command FLUSHALL "" rename-command CONFIG "" bind 指定IP地址 port 自定义端口
2. 网络隔离
# 使用防火墙限制访问IP sudo ufw allow from 信任IP to any port 6379 # 或使用iptables sudo iptables -A INPUT -p tcp -s 信任IP --dport 6379 -j ACCEPT
自动化监控脚本
创建健康检查脚本:
#!/bin/bash
REDIS_HOST="localhost"
REDIS_PORT="6379"
if redis-cli -h $REDIS_HOST -p $REDIS_PORT ping | grep -q "PONG"; then
echo "Redis is running"
exit 0
else
echo "Redis is down"
# 尝试重启
sudo systemctl restart redis
exit 1
fi
总结
Redis连接被拒绝问题通常由以下原因引起:
- 服务未运行 - 启动Redis服务
- 配置限制 - 修改绑定地址和保护模式
- 防火墙阻挡 - 开放相应端口
- 资源不足 - 检查系统资源
通过系统化的诊断流程,可以快速定位并解决问题。建议在生产环境中配置适当的监控和告警机制,确保Redis服务的稳定性。
记住:在修改配置后务必重启Redis服务,并在生产环境中谨慎修改安全相关配置。

以上就是Redis连接被拒绝(Connection refused)问题的完整解决指南的详细内容,更多关于Redis连接被拒绝的资料请关注脚本之家其它相关文章!
