一、问题描述

        使用Java连接自己阿里云服务器上的Redis失败,报错原因就是连接超时(Connect timed out),如下图所示:

redis超时断开客户端连接 redis链接超时_redis

二、解决方法

        (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

redis超时断开客户端连接 redis链接超时_redis_02


         (2)在bind下方不远处可以看到protected-mode yes,将其改为protected-mode no即可。

redis超时断开客户端连接 redis链接超时_阿里云_03


        (3)由于我使用的是阿里云服务器,为了安全起见,我对Redis设置了密码。输入/SECURITY可快速定位到设置密码所在的组。将下图最后一行注释取消,然后将foobared改成自己的密码。最后重启Redis。

redis超时断开客户端连接 redis链接超时_阿里云_04


        (4)阿里云安全组开启6379端口

        ①来到阿里云服务器官网,进入控制台,左边菜单栏中点击实例,然后在实例界面中选择自己的服务器点击管理,如下图1所示,然后点击安全组,如下图2所示。

        ②点击配置规则->手动添加,输入端口范围Redis(6379)(上面有的选),然后授权对象我只授权了自己笔记本的ip地址,感觉授权为0.0.0.0/0不太安全。自己公网ip地址可以在百度搜索ip地址就可以查到,最后设置如图3所示。(但是这种设置方式每次电脑ip地址改变后都要进行修改,不太方便,仅供平时学习使用)。

redis超时断开客户端连接 redis链接超时_阿里云_05

图1

redis超时断开客户端连接 redis链接超时_redis超时断开客户端连接_06

图2 

redis超时断开客户端连接 redis链接超时_redis_07

图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,如下图所示:

redis超时断开客户端连接 redis链接超时_java_08

五、 最后

        如果按照上述方法仍然显示连接超时,可以尝试关闭linux防火墙等操作。我自己连接失败的原因就是没有在阿里云开启Redis端口。