今天在学习Redis的过程中碰到Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 192.168.43.144:6379

public class TestPing {
    public static void main(String[] args) {
    	//192.168.43.144为虚拟机的IP地址
        Jedis jedis = new Jedis("192.168.43.144", 6379);
        System.out.println(jedis.ping());
    }
}

从下图很明显可以看出来是一个ConnectionException的连接异常;

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 192.168.43.144:6379
	at redis.clients.jedis.Connection.connect(Connection.java:204)
	at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:100)
	at redis.clients.jedis.Connection.sendCommand(Connection.java:125)
	at redis.clients.jedis.Connection.sendCommand(Connection.java:120)
	at redis.clients.jedis.BinaryClient.ping(BinaryClient.java:113)
	at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:186)
	at com.redis.TestPing.main(TestPing.java:12)
Caused by: java.net.SocketTimeoutException: connect timed out
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at redis.clients.jedis.Connection.connect(Connection.java:181)
	... 6 more

连接异常大体可以分为二类

1. IP地址

  1. 首先检查main方法或者@Test中的IP地址是否与虚拟机中的IP地址一致,端口号6379是否与虚拟机中的端口号一致。

  2. 利用主机的IP地址ping虚拟机的IP地址,看是否能ping通。一般情况下,如果虚拟机采用NAT的方式连接网络,则会出现主机ping不通虚拟机,虚拟机可以ping通主机的情况。因此可以将虚拟机连接网络的方式改为桥接,这时虚拟机和主机共享一个网段,当然也就可以ping通。
    -在这里插入图片描述

  3. 虚拟机中的redis.conf配置文件中默认bind 127.0.0.1,此IP地址仅能在虚拟机本地才可以连接到redis,因此需要将redis.conf配置文件中的bind 127.0.0.1注释掉或者修改成电脑主机的IP地址*(我的是192.168.43.254)*或者修改为默认路由地址:0.0.0.0。

#bind 127.0.0.1  
或者
bind 192.168.43.144
或者
bind 0.0.0.0

2. 防火墙

产生连接异常的一部分原因也是由于Liunx中防火墙默认开启,需要将防火墙关闭。

//关闭防火墙
systemctl stop firewalld.service

同时需要在redis.conf的配置文件中将安全模式关闭掉,默认是yes,改为no。

protected-mode no

最后shutdown,重启redis就可以正常访问到了。

我的问题是由于配置了NAT,导致主机IPping不通虚拟机的IP,最后参考了其他人的博客发现只需要将NAT换成桥接就可以了,这样就成功ping通了。
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐