我试图从java连接到JedisCluster(ElastiCache Redis)。但是我得到了集群中没有可达节点的JedisConnectionExcema。
这是我连接JedisCluster的代码
public static void main(String[] args) throws IOException{
final GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxWaitMillis(2000);
poolConfig.setMaxTotal(300);
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com",6379));
jedisClusterNode.add(new HostAndPort("mycachecluster.eaogs8.0002.usw2.cache.amazonaws.com",6379));
JedisCluster jedisCluster = new JedisCluster(jedisClusterNode,poolConfig);
System.out.println("Cluster Size...." + jedisCluster.getClusterNodes().size());
try{
jedisCluster.set("foo", "bar");
jedisCluster.get("foo");
}
catch(Exception e){
e.printStackTrace();
}
finally{
jedisCluster.close();
}
}
运行这个之后我得到的异常
redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57)
at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:74)
at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116)
at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31)
at redis.clients.jedis.JedisCluster.set(JedisCluster.java:103)
我查过了
telnet mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com 6379
正如AWS文件中提到的,我得到的回复是连接的。
这里的问题是什么?为什么我不能使用java连接到JedisCluster?
注:
我用的是jedis版本2.9.0
更新:
在AWS中,传输加密和静止加密被激活
所以
Jedis jedis = null;
try{
jedis = new Jedis(URI.create("rediss://mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com:6379"));
System.out.println(jedis.ping());
System.out.println("XXXXX: "+jedis.get("c"));
}
catch(Exception exception){
exception.printStackTrace();
}
finally{
jedis.close();
}
很好。但绝地武士团不是。
在启用SSL连接redis集群服务器时,JedisCluster出现了一些问题。即使有了最新的修订(截至2020年7月),我们也得到了例外JedisNoReachableClusterNodeExcema
。关于各种服务器需求所需配置的文章非常少。
我们需要两种语言的库,一种是Java,另一种是Python。对于python,我使用了python redis py集群。而对于爪哇,我们最初尝试了绝地武士,然后是绝地武士团,但都没有帮助。我找到的另一个图书馆是
生菜
对于支持SSL的redis群集服务器,配置非常简单,并支持构建器模式来构造带有可选参数的连接对象。下面是创建并连接到redis cluster server的示例
RedisURI redisURI = RedisURI.Builder.redis("<<Redis Server primary endpoint>>", 6379).withSsl(true).withVerifyPeer(false).build();
RedisClusterClient redisClient = RedisClusterClient.create(redisURI);
StatefulRedisClusterConnection<String, String> conn = redisClient.connect();
List<KeyValue<String, String>> res_1= conn.sync().mget(keys...)_
conn.close();
但是请注意,如果redis服务器是一个单节点实例,那么即使是Jedis库也很好用。
从URI。创建(”rediss://...“
,很明显,您正在使用Redis SSL方案来创建绝地武士的成功连接。但绝地武士团还没有SSL支持。
有一个悬而未决的功能请求。
我试图从绝地人才库中回收资源时出错了。代码如下。
根据我的理解,使用JOhm和Jedis,可以在Redis中存储/检索java类对象。我有一个问题是,JOhm是否也将java对象保存在内存中,以便下次需要该对象(与key相关联)时,从内存返回该对象,而不是每次都从Redis读取该对象?
我为数据可视化工具开发了一个插件。现在我想在它里面使用redis。当我在另一个项目(不在我的插件中)中尝试下面的redis代码时,效果很好。 但当我在插件中使用绝地武士时,我得到了由java引起的和错误。为了把我的插件安装到这个数据可视化工具上。我需要创建一个jar文件,我这样做了,它在不添加jedit部分的情况下运行良好。 我正在使用IntelliJ Idea,我创建了一个工件,并从顶部菜单中的
所以,我有两个应用程序使用绝地武士。它们都连接到同一台服务器,其中一个监听发布以检查是否写入了某些内容。好吧,经过大约10个小时的持续使用和装载,设置/获取/发布/订阅等,绝地武士们返回了破碎的管道。我不知道为什么,因为我在绝地武士中有超时到0的时间。有什么想法吗?
我已经通过了很多环节,比如绝地,无法获得绝地连接:无法从池中获得资源,无法获得绝地连接;无法从池中获取资源,但仍获取以下错误。 我在Spring Batch中使用Spring Data Redis,从mysql读取数据并写入redis DB。似乎有些连接错误。 下面的错误仅供参考。 我正在使用下面的简单配置。
我们的应用程序使用并连接到,以下是我如何获得jedis资源: 这是我的绝地说唱者(统一资源管理): 是Jedis实例的容器,下面是我如何使用它: 请注意,可能非常大(例如可以达到最大8KB)。 每次我重启我们的应用程序,所有的redis连接都是正常的,但是几个小时后,异常出来了。频率变得越来越高,然后所有到Redis的连接都断开了,可以创建新的连接。 以下是我的配置: 异常堆栈跟踪: