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

SpringBoot Elasticache JedisMovedData异常:移动

戴高远
2023-03-14

正在尝试将SpringBoot与SpringData与Elasticache一起使用:

application.properties:

spring.redis.host=XXXX-dev.XXXX.clusXXXcfg.XXX.cache.amazonaws.com
spring.redis.port=6379

缓存配置:

@Configuration
@PropertySource("classpath:application.properties")
public class CacheConfiguration {


@Value("${spring.redis.host}")
private String redisHostName;

@Bean
public RedisTemplate<String, Company> redisTemplate() {
    RedisTemplate<String, Company> template = new RedisTemplate();
    template.setConnectionFactory(jedisConnectionFactory());
    return template;
}

@Bean
JedisConnectionFactory jedisConnectionFactory() {
    JedisConnectionFactory factory = new JedisConnectionFactory();
    factory.setHostName(redisHostName);
    factory.setUsePool(true);
    return factory;
}


@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

}

服务电话:

@Autowired
RedisTemplate<String, Company> redisTemplate;

private ValueOperations valueOperations;

@PostConstruct
private void init() {
    valueOperations = redisTemplate.opsForValue();
}

@Override
public String createOtp(Company company) {
    String token = UUID.randomUUID().toString();
    valueOperations.set(token, company);
    valueOperations.getOperations().expire(token, 5, TimeUnit.MINUTES);
    return token;
}

错误:

组织。springframework。数据雷迪斯。ClusterRedirectException:重定向:插槽7228到10…:6379.*

redis.clients.jedis.exceptions.JedisMovedData异常:移动7228 10...:6379。**

问题是-配置有什么问题?

共有1个答案

惠翰藻
2023-03-14

您在Redis Cluster模式下运行Elasticache(只有Redis Cluster以MOVED响应),但连接工厂配置为独立模式。

Spring Boot可以自动配置您手动设置的所有内容。基本上,删除您的CacheConfiguration类(或者至少删除大部分代码):

@Configuration
public class CacheConfiguration {

  @Bean
  public RedisTemplate<String, Company> redisTemplate(RedisConnectionFactory connectionFactory) {
      RedisTemplate<String, Company> template = new RedisTemplate();
      template.setConnectionFactory(connectionFactory);
      return template;
  }
}

然后在应用程序中配置以下属性。属性文件:

spring.redis.cluster.nodes=<node_host>:<port> # Comma-separated list of "host:port" pairs to bootstrap from.

Spring Boot加载应用程序。默认情况下属性,Redis自动配置配置一个Redis模板

另见:

  • 常见应用程序属性
  • 外部化配置

 类似资料:
  • 我使用的是Laravel5.2,有一个多服务器自动伸缩的体系结构。我想在一个集中的位置有会话和缓存。我想用AWS弹力痛同样。 移动13841 some_ip_address_of_aws:6379 我尝试使用本地redis,它工作,所以predis工作正常。我试图在线查看解决方案,但无法获得解决方案。我认为配置endpoint正试图将redis连接重定向到我拥有的9个节点中的一个可用节点url。然

  • 我有一个飞行路线例外: 我在文档和论坛上查找,但没有找到这个异常的含义。请有人告诉我这些异常的原因是什么!谢谢

  • 应用程序通常会通过抛出另一个异常来响应异常。 实际上,第一个异常引起第二个异常。 它可以是非常有助于用户知道什么时候一个异常导致另一个异常。 “异常链(Chained Exceptions)”帮助程序员做到这一点。 以下是Throwable中支持异常链的方法和构造函数。 Throwable getCause() Throwable initCause(Throwable) Throwable(St

  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u

  • 问题内容: 异常存储在哪里?堆,堆。如何为异常分配和释放内存?现在,如果您有多个需要处理的异常,是否创建了所有这些异常的对象? 问题答案: 我假设为异常分配的内存分配方式与所有其他对象(在堆上)分配方式相同。 这曾经是个问题,因为您不能为OutOfMemoryError分配内存,这就是直到Java 1.6之前 才没有堆栈跟踪的原因。现在,它们也为stacktrace预分配了空间。 如果您想知道在抛

  • 因为Java编程语言不需要捕获方法或声明未检查异常(包括 RuntimeException、Error及其子类),程序员可能会试图编写只抛出未检查异常的代码,或使所有异常子类继承自RuntimeException。这两个快捷方式都允许程序员编写代码,而不必担心编译器错误,也不用担心声明或捕获任何异常。虽然这对于程序员似乎很方便,但它避开了捕获或者声明异常的需求,并且可能会导致其他人在使用您的类而产