Jedis 问题 - “无法连接到解析 DNS 名称的任何主机。”

问题描述 投票:0回答:2

每当我尝试使用 Jedis 从 Java 应用程序连接到 Redis 服务器时,我都会得到

JedisConnectionException: Failed to connect to any host resolved for DNS name.
Java 应用程序与 Redis 服务器在同一台计算机上运行。

当我使用

systemctl
检查Redis服务器的状态时,它在线并且运行没有问题。我还使用运行它的 Linux 计算机上的命令行通过终端连接到 Redis 客户端,进行身份验证并执行
PING
,其中返回
PONG
以确保 Redis 正在运行。

Redis配置

我在

redis.conf
中取消注释了 bind 和 requirepass ,看起来如下(当然不是我的整个配置):

bind 127.0.0.1
requirepass mypassword
port 6379

这是我正在使用的代码:

private void setupRedis(RedisCredentials credentials) {
    final GenericObjectPoolConfig<Jedis> poolConfig = new JedisPoolConfig();
    poolConfig.setMaxIdle(0);

    Jedis jedis;
    try (JedisPool pool = new JedisPool(poolConfig, credentials.getIp(), credentials.getPort())) { 
        jedis = pool.getResource();
    }

    jedis.auth(credentials.getPassword());
    jedis.connect();
    log.info("Redis connection was established.")
}

我对使用 Redis 有点陌生,因此我不确定我的帖子中要包含多少信息。非常感谢所有和任何帮助!

试过

我多次尝试了上面提供的以下代码。我也尝试过重新启动 Redis 服务器并再次运行代码,但没有成功。

预计会发生

应用程序记录“Redis 连接已建立”并且在此过程中不会收到任何错误。

结果

控制台记录了

redis.clients.jedis.exceptions.JedisConnectionException: Failed to connect to any host resolved for DNS name
,因此应用程序显然无法建立与 Redis 的连接。

java linux ubuntu redis
2个回答
0
投票

我也犯过同样的错误。如果我检查开放端口,看起来 6379 已开放,但无法连接。

我建议检查防火墙。然后在箱子上打开那里的端口。

ufw允许6379


0
投票

对于 redis-cluster 用户,如果某些主节点未启动并运行,则可能会发生此问题。

© www.soinside.com 2019 - 2024. All rights reserved.