之前,我们使用的Redis是通过AWS ElastiCache禁用集群模式的。
我们使用Jedis的Java代码指向主要的单节点endpoint,用于读写。
我们现在启用了群集模式。
现在,我们已经将代码更改为指向新Redis群集的配置endpoint,但它现在在接收请求时会抛出错误,请参见以下内容:
Redis不可用。继续使用队列请求消息。org.springframework.data.redis.群集重定向异常:重定向:槽2356到[ip地址]: 6379。;嵌套异常是redis.clients.jedis.exceptions.JedisMovedDataExc0019: MOVED 2356[ip地址]: 6379
我们的配置代码如下:
@Bean(name = "redisTemplate")
public RedisTemplate<String, String> getRedisTemplate(JedisConnectionFactory jedisConnectionFactory) {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(jedisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
@Bean
JedisConnectionFactory jedisConnectionFactory(Configuration config) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName(config.get(HOST));
jedisConnectionFactory.setPort(config.getInt(PORT));
jedisConnectionFactory.setUsePool(true);
jedisConnectionFactory.setPoolConfig(createJedisPoolConfig(config));
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}
JedisPoolConfig createJedisPoolConfig(Config config) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(config.getInt(MAX, 8));
poolConfig.setMaxIdle(config.getInt(MAXIDLE, 8));
poolConfig.setMinIdle(config.getInt(MINIDLE, 1));
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
return poolConfig;
}
仅仅改变绝地武士以指向配置endpoint就足够了吗?
我需要更改代码中的任何内容吗?
仅仅改变绝地武士以指向配置endpoint就足够了吗?
不,因为Redis客户机——本例中的绝地武士——需要知道它正在连接到一个集群,而目前没有。
当Redis集群告诉客户端所请求的数据现在已经被“重定向”到另一个节点时,您会得到“移动”。然而,Jedis不知道正在使用集群,因此还有任何其他节点,因此甚至不能连接到它们来检索数据。
我需要更改代码中的任何内容吗?
要发现Redis节点,需要使用JedisCluster
而不是JedisPool
请注意,您只需要引用配置endpoint:
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort(CONFIGURATION_ENDPOINT, 6379));
try (JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes)) {
// ...
}
当我试图按照以下部署指南连接到主节点时,我面临着MasternotFounderRorr:https://docs.bitnami.com/tutorials/deploy-redis-sentinel-production-cluster/ 连接主Redis Sentinel节点的代码是: 我面对红魔。哨兵。MasternotFounderRorr:没有为“MyMaster”错误找到master
问题内容: 我们知道不建议在Amazon实例外部访问ElastiCache,因此我们仅在Amazon EC2实例内部进行尝试。 我们有一个具有9个节点的ElastiCache Redis集群 。当我们尝试使用常规redis实现连接到它时,它会引发一些Moved错误 根据@Miller尝试了重试策略方法。还尝试过使用不稳定和稳定(可怜的人)实现的RedisCluster。 这些实现均无作用。有什么建
我已经使用以下指南成功地设置了一个密码保护的redis群集: 我使用ruby和下面的连接字符串…我做错了吗? 我得到的错误是:
我使用spring boot data redis连接到redis群集,使用版本2.1.3,配置如下: 但是,在操作过程中,始终会收到警告异常消息,如下所示: 这似乎是莴苣的问题,如何映射远程主机
我目前正在做一个小项目,我需要将kafka集群连接到mongodb,以便将发布到kafka主题的消息存储在mongodb数据库中。我目前有一个本地kafka集群,一个sping引导生产者向一个主题发布消息,一个spinger引导消费者在本地使用这些消息。我也在本地安装了mongob指南针……我一直在看教程,我发现我必须使用某种接收器连接器(mongob连接器)来做我想做的事情,但大多数示例都是基于
由于单个redis实例不符合我的要求,我选择了redis cluster。我用三个节点组成集群,并将数据填充到集群中。当我使用JedisCluster从集群获取数据时,它比单个实例花费更多的时间。那么,将绝地与redis星系团连接起来的正确方式是什么呢。我如何利用连接池将绝地与redis集群连接起来?