一、问题描述
使用Java连接自己阿里云服务器上的Redis失败,报错原因就是连接超时(Connect timed out),如下图所示:
二、解决方法
(1)首先查看自己redis.conf配置文件中的bind是否注释掉。bind的默认值为127.0.0.1表示只能接受本机的请求访问,将其注释掉则可以接受任何ip地址的访问。
(2)查看redis.conf配置文件中的protected-mode是否设置为no。protected-mode的默认值为yes表示开启保护模式,此时需要配置bind ip或者设置访问密码。设置为no则外部网络可以直接访问。(在这里我选择了设置为no)
(3)去阿里云安全组设置将6379端口开放。
三、具体做法
(1)redis.conf一般放在linux的/etc文件夹下面,所以我们使用以下命令编辑redis.conf文件。
vi /etc/redis.conf
进入编辑界面后,使用/+关键字搜索bind所在的NETWORK组,输入以下命令可以快速定位到bind所在的位置,然后将下图中最下面一句bind 127.0.0.1 -::1注释掉即可。
/NETWORK
(2)在bind下方不远处可以看到protected-mode yes,将其改为protected-mode no即可。
(3)由于我使用的是阿里云服务器,为了安全起见,我对Redis设置了密码。输入/SECURITY可快速定位到设置密码所在的组。将下图最后一行注释取消,然后将foobared改成自己的密码。最后重启Redis。
(4)阿里云安全组开启6379端口
①来到阿里云服务器官网,进入控制台,左边菜单栏中点击实例,然后在实例界面中选择自己的服务器点击管理,如下图1所示,然后点击安全组,如下图2所示。
②点击配置规则->手动添加,输入端口范围Redis(6379)(上面有的选),然后授权对象我只授权了自己笔记本的ip地址,感觉授权为0.0.0.0/0不太安全。自己公网ip地址可以在百度搜索ip地址就可以查到,最后设置如图3所示。(但是这种设置方式每次电脑ip地址改变后都要进行修改,不太方便,仅供平时学习使用)。
图1
图2
图3
四、测试
使用Java连接Redis,代码如下:
public class JedisDemo1 {
public static void main(String[] args) {
//创建Jedis对象
Jedis jedis = new Jedis("ip地址",6379); //这里ip地址输入自己redis所在服务器的ip地址
jedis.auth("password"); //这里password使用你设置的Redis密码,没设置就注释掉
//测试
String value = jedis.ping();
System.out.println(value);
jedis.close();
}
}
返回PONG则连接chengg,如下图所示:
五、 最后
如果按照上述方法仍然显示连接超时,可以尝试关闭linux防火墙等操作。我自己连接失败的原因就是没有在阿里云开启Redis端口。