【问题标题】:Redis Spring data with Lettuce: com.lambdaworks.redis.RedisCommandExecutionException: MOVED error带有生菜的 Redis Spring 数据:com.lambdaworks.redis.RedisCommandExecutionException: MOVED 错误
【发布时间】:2019-04-23 10:44:30
【问题描述】:

我在集群模式下使用 AWS ElastiCache (Redis)。我有两个实现来连接到 ElastiCache。其中一种实现是直接使用本机 Lettuce 驱动程序,另一种是使用 Spring 数据和 Lettuce 作为底层驱动程序。 AWS ElastiCache 具有集群配置终端节点。我想使用此端点连接到 ElastiCache。我能够使用带有原生 Lettuce 驱动程序实现的集群端点成功连接到 ElastiCache,但是在使用带有集群端点的 spring 数据时出现以下错误

Spring 数据:1.8.9-RELEASE(不能使用更高版本的 Spring)

生菜:4.5.0-决赛

@Bean
public LettuceConnectionFactory redisConnectionFactory() {
    LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
    lettuceConnectionFactory.setHostName(<cluster_endpoint>);
    lettuceConnectionFactory.setPort();
    lettuceConnectionFactory.setUseSsl(Boolean.valueOf(useSsl));
    //lettuceConnectionFactory.setPassword(password);
    return lettuceConnectionFactory;
}

错误:

Caused by: org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is com.lambdaworks.redis.RedisCommandExecutionException: MOVED 12894 cache---.usw2.cache.amazonaws.com:6379
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:48)
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41)

它在以下两种情况下都能正常工作 -
1) 我使用集群节点端点并通过RedisClusterConfiguration 注入LettuceConnectionFactory
2) 如果我使用 Lettuce 作为直接实现(不是通过 Spring 数据),使用 StatefulRedisClusterConnection

上述两个错误的原因可能是什么?我更愿意通过使用集群配置端点将生菜与 Spring 数据一起使用。

【问题讨论】:

  • 我也有同样的问题!

标签: spring-data amazon-elasticache spring-data-redis lettuce


【解决方案1】:

下面是使用Spring Data连接Elasticache Redis集群的解决方案-

使用 ElastiCache 集群配置端点:

@Bean
public RedisClusterConfiguration redisClusterConfiguration() {
  RedisClusterConfiguration clusterConfiguration = new 
  RedisClusterConfiguration();
  clusterConfiguration.clusterNode("host", port);
  new LettuceConnectionFactory(clusterConfiguration);
}

使用 ElastiCache 节点端点:

@Bean
public RedisClusterConfiguration redisClusterConfiguration() {
    RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration()
            .clusterNode("redis-cluster----0001-001.redis-cluster---.usw2.cache.amazonaws.com",6379)
            .clusterNode("redis-cluster----0001-002.redis-cluster---.usw2.cache.amazonaws.com",6379)
            .clusterNode("redis-cluster----0001-003.redis-cluster---.usw2.cache.amazonaws.com",6379)
            .clusterNode("redis-cluster----0001-004.redis-cluster---.usw2.cache.amazonaws.com",6379);
    return clusterConfiguration;
}

感谢 Mark Paluch 在 Spring Data 论坛中回复了我的问题。 这是详细信息 - https://jira.spring.io/browse/DATAREDIS-898

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 2022-10-20
    • 2015-12-21
    • 2023-03-11
    • 2018-06-25
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多