代码之家  ›  专栏  ›  技术社区  ›  Dmitry Makarichev

SpringBoot Elasticache JedisMovedDataException:已移动

  •  8
  • Dmitry Makarichev  · 技术社区  · 7 年前

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

    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。数据redis。ClusterRedirectException:重定向:插槽7228到10。 . . :6379.*

    redis。客户。绝地武士。例外情况。JedisMovedDataException:移动了7228 10。 . .

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

    1 回复  |  直到 7 年前
        1
  •  8
  •   DBS    6 年前

    您正在Redis集群模式下运行Elasticache(只有Redis集群以 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;
      }
    }
    

    然后在中配置以下属性 application.properties

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

    弹簧防尘套负载 默认情况下,Redis自动配置配置 RedisTemplate<Object, Object> 默认情况下为bean。专门化bean是一个有效的用例,不要重复自动配置已经提供的内容,特别是如果您想要实现自动配置的功能。

    另请参见: