Java Redis 连接问题

img

img

img

我配置的的是虚拟机里面Redis 地址。不仅连不上,报错里面还显示的是连接不上localhost

想问下题主是不是用的springboot?

该回答引用ChatGPT
根据问题描述,可以得出以下结论:

1. 在 Java 代码中,使用 Jedis 连接 Redis 时,代码中使用的 Redis 地址为虚拟机内的地址。

2. 连接 Redis 时,报错显示无法连接到 localhost。

根据这两个结论,可以推断出可能存在以下情况:

1. Java 代码中的 Redis 地址配置有误,应该使用虚拟机内的 IP 地址或者是映射到宿主机的端口号。

2. Redis 本身运行在虚拟机内,但是 Jedis 连接时默认会使用本地地址 localhost,导致连接失败。

针对第一个可能性,在 Jedis 的连接语句中需要使用正确的 Redis 地址和端口号。考虑到 Redis 可以通过映射宿主机端口的方式进行访问,可以将 Redis 地址设置为宿主机的 IP 地址,端口号设置为映射的端口号。

针对第二个可能性,可以明确告诉 Jedis 连接时需要使用虚拟机内的 Redis 地址,而不是本地地址 localhost。可以在连接语句中加上 Redis 地址的参数,指定为虚拟机内的地址。

最终的代码示例:


Jedis jedis = new Jedis("虚拟机内的IP地址", 映射的端口号);
// 或者
Jedis jedis = new Jedis("虚拟机内的IP地址", 映射的端口号, "虚拟机内的Redis地址");


需要注意的是,连接 Redis 时可能还需要输入密码,具体需要根据 Redis 的配置来确定。如果 Redis 没有设置密码,则无需输入密码。

你先看下你本地是否可以连接虚拟机,ping一下这个ip地址,如果不能ping通,那么就是你虚机机网络的问题,你只需要在虚拟机软件上,编辑,然后虚拟网络编辑器还原默认设置,之后就会有一个新的ip地址,可以使用了。

  1. 建议本地先用redis-cli链接下看看是否合适

  2. 建议hosts文件配置看一下,telnet或者ping下网络通不通

3.建议看下redis服务是否可用,绑定网卡地址是否OK?防火墙是否关闭

4.检查完以上麻烦看下是否可以采纳

你确定启动时是用的这个配置嘛,有没可能别的地方有配置redis地址为localhost呢

大概率是你这个配置文件没有生效,可以断点查一下项目启动时的加载逻辑,看是不是加载的你那个配置文件

以下内容部分参考ChatGPT模型:
首先,根据问题描述,看起来是连接配置出现了问题。建议检查一下连接的配置是否正确,包括Redis的地址、端口号、密码等。同时,也要确认一下Redis服务是否已经正常启动。

其次,可以尝试使用Redis的Java客户端库进行连接,比如Jedis或Lettuce。这些库提供了简单易用的API,可以很方便地连接Redis并进行操作。以下是一个使用Jedis连接Redis的示例代码:

Jedis jedis = new Jedis("localhost", 6379);
jedis.auth("password"); // 如果有密码需要认证
jedis.set("key", "value");
String value = jedis.get("key");
System.out.println(value);
jedis.close();

最后,如果以上方法还无法解决问题,建议检查一下网络是否正常,可能是网络问题导致无法连接到Redis。也可以尝试在其他机器上测试连接,看是否能够正常连接。
如果我的建议对您有帮助、请点击采纳、祝您生活愉快

建议mvn clean一下
如果新配置还没有生效,建议清除一下编辑工具的缓存

img

虚拟机防火墙关下,或者把虚拟机端口开下

根据错误信息,应该是没有走你虚拟机上的连接,有可能是缓存造成的。你在本地起个redis服务,如果能连接上说明就是缓存原因

配置未生效,可以把配置信息都贴出来看下吗?

有可能是你改错配置文件了,导致你的项目还是用的原先的配置文件,
另外也有可能是你的项目缓存导致的,如果是maven项目的话可以 clean package一下。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
Java 连接 Redis 可以使用 Jedis 这个开源的 Redis 的 Java 客户端库,以下是连接 Redis 的示例代码:

import redis.clients.jedis.Jedis;

public class RedisConnectionTest {
    
    public static void main(String[] args) {
        // 指定redis服务器的IP地址和端口号
        Jedis jedis = new Jedis("192.168.1.100", 6379);
        // 认证密码,如果没有设置可以不填
        jedis.auth("password");
        // 操作redis
        jedis.set("key", "value");
        String value = jedis.get("key");
        System.out.println(value);
        // 关闭连接
        jedis.close();
    }
}

在上述代码中,首先需要指定 Redis 服务器的 IP 地址和端口号,例如这里使用的是虚拟机里面 Redis 的地址为 192.168.1.100:6379。在连接 Redis 时需要认证密码,如果没有设置可以不填。然后可以进行操作 Redis 服务器的操作,例如设置 key-value 键值对,并且获取 key 对应的值。最后,应当关闭连接以释放资源。

如果在连接 Redis 时报错连接不上 localhost,可以检查连接 Redis 的代码中是否将地址填成了 localhost 或者 127.0.0.1。正确的做法应将地址设置成 Redis 服务器的 IP 地址。
如果我的回答解决了您的问题,请采纳!