当前位置: 首页 > 知识库问答 >
问题:

带生菜的Redis Spring数据:com.lambdaworks.redis.Redis命令执行异常:移动错误

融渊
2023-03-14

我在集群模式下使用AWS ElastiCache(Redis)。我有两个实现来连接ElastiCache。其中一种实现是直接使用本机莴苣驱动程序,另一种是使用Spring数据,并将莴苣作为底层驱动程序。AWS ElastiCache具有群集配置endpoint。我想用这个endpoint连接到ElastiCache。我能够使用带有本机驱动程序实现的群集endpoint成功连接到ElastiCache,但在使用带有群集endpoint的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)我使用集群节点endpoint,并通过RedisClusterConfiguration注入LettuceConnectionFactory
2)如果我使用Lettuce作为直接实现(不是通过Spring数据)使用StatefulRedisClusterConnection

上述两个错误的原因是什么?我更喜欢通过使用集群配置endpoint将莴苣与Spring数据结合使用。

共有1个答案

林威
2023-03-14

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

使用ElastiCache群集配置endpoint:

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

使用ElastiCache节点endpoint:

@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数据论坛上回复了我的问题。以下是细节-https://jira.spring.io/browse/DATAREDIS-898

 类似资料:
  • 我安装了Maven 3.2.5并在我的项目目录中执行了。显示以下错误: 插件org.apache.maven.plugins:maven-resources-plugin:2.6或其依赖项无法解析:无法读取org.apache.maven的工件描述符。plugins:maven-resources-plugin:jar:2.6:无法将工件org.apache.maven.plugins:maven

  • 然后错误显示在蜂巢: 失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedWork返回代码-101。org.apache.hadoop.mapreduce.v2.util.MRApps.setEnvFromInputProperties(Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Lorg/ap

  • 问题内容: 我正在尝试使用以下代码执行Redis的几种异步方法 所有方法成功执行 但是我得到了错误 该方法被执行并返回true,它可能将其解释为true,但是我不明白为什么它必须使用该方法应用于它? 我可以通过将一个函数(err,结果)作为最后一个元素添加到client.hincrby中来获得增量的结果。但是,如何在end函数的result变量中获得所有结果呢? 问题答案: 我想您使用的async

  • 我有一个非常基本的页面,包含一个DataTable和一个CommandButton: 方法< code > testbb . getlistofelements()只返回< code>Integer值的集合。重要的是,DataTable设置了属性< code > draggableColumns = " true " 。如果我单击CommandButton,我会得到以下< code > NullP

  • 也许我完全误解了应该如何工作,但除了返回错误之外,我似乎无法让它做任何事情。 我是这么做的: Mongod正在运行 我想备份一个名为“mydb”的数据库 我在mongo shell中 我尝试了命令并得到了上面的错误 我尝试了和,都有相同的问题 我在这里做错了什么?

  • 我在获取H2 In Memory数据库以填充时遇到麻烦。这里的想法是拥有唯一的BuildingCode作为主键和id。 我发现了以下类级错误: org.hibernate.tool.schema.spi.命令验收异常:通过JDBC语句执行DDL“更改表属性添加列building_codevarchar(255)not null”时出错 原因:org。h2。jdbc。JdbcSQLIntegrity