如果有 Redis 和 Redis Commander 的 docker compose,使用 java 代码连接到 Redis

Posted

技术标签:

【中文标题】如果有 Redis 和 Redis Commander 的 docker compose,使用 java 代码连接到 Redis【英文标题】:Connect to Redis using java code if there is docker compose of Redis and Redis Commander 【发布时间】:2021-12-16 01:46:18 【问题描述】:

我正在尝试使用下面的 Java 代码和 Jedis 库连接到 Redis,但连接失败,有人可以帮忙吗?

Jedis jedis = new Jedis("localhost");
String pingResponse = jedis.ping();
System.out.println("ping should return pong" + pingResponse);

这是我的 docker-compose 文件

version: '3'
services:
  redis:
    container_name: redis
    hostname: redis
    image: redis

  redis-commander:
    container_name: redis-commander
    hostname: redis-commander
    image: rediscommander/redis-commander:latest
    restart: always
    environment:
    - REDIS_HOSTS=local:redis:6379
    ports:
    - "8082:8081"

以下是我得到的例外:

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host redis: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:188)
    at com.altimetrik.demo.bean.Sample.main(Sample.java:23)

【问题讨论】:

为什么会失败?请发布异常和相关日志。 @TomElias 添加了错误日志 【参考方案1】:

我认为您的 Redis 容器不会暴露外部端口进行连接,只有指挥官暴露 8002。(尝试连接到 localhost:8002)。 docker compose 创建了一个默认的“桥接”网络,因此容器可以相互通信,但不能在外部通信,除非您公开端口。指挥官可以连接到 REDIS,因为它们在同一个网络上。

【讨论】:

以上是关于如果有 Redis 和 Redis Commander 的 docker compose,使用 java 代码连接到 Redis的主要内容,如果未能解决你的问题,请参考以下文章

redis常用命令

redis常用命令

Redis服务启动失败,提示:redis-server:command not found

redis事务

Redis重启Redisson出错:Unable to send command!

RedisCluster集群模式下master宕机主从切换期间Redis command timed out的问题