【问题标题】:use spring boot data redis Connect to the redis cluster problem使用spring boot data redis连接redis集群问题
【发布时间】:2019-03-18 03:39:49
【问题描述】:

我使用spring boot data redis连接redis集群,使用2.1.3版本配置如下:

@Bean
@Primary
public RedisConnectionFactory myLettuceConnectionFactory(GenericObjectPoolConfig poolConfig) {
    RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
    final List<String> nodeList = redisProperties.getCluster().getNodes();
    Set<RedisNode> nodes = new HashSet<RedisNode>();
    for (String ipPort : nodeList) {
        String[] ipAndPort = ipPort.split(":");
        nodes.add(new RedisNode(ipAndPort[0].trim(), Integer.valueOf(ipAndPort[1])));
    }
    redisClusterConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));
    redisClusterConfiguration.setClusterNodes(nodes);
    redisClusterConfiguration.setMaxRedirects(redisProperties.getCluster().getMaxRedirects());
    LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
            .commandTimeout(redisProperties.getTimeout())
            .poolConfig(poolConfig)
            .build();

    RedisClusterClient clusterClient ;

    LettuceConnectionFactory factory = new LettuceConnectionFactory(redisClusterConfiguration,clientConfig);
    return factory;
}

但是,在操作过程中,总是会收到如下的WARN异常信息:

嗯,这个好像是生菜的问题,How to map remote host & port to localhost using Lettuce,但是不知道在spring boot data redis中怎么用。欢迎任何解决方案,谢谢

【问题讨论】:

    标签: spring-boot spring-data-redis lettuce


    【解决方案1】:

    我已经得到了答案,所以让我们像这样定义一个 ClinentRourse:

     MappingSocketAddressResolver resolver = MappingSocketAddressResolver.create(DnsResolvers.UNRESOLVED ,
                hostAndPort -> {
                    if(hostAndPort.getHostText().startsWith("172.31")){
                        return HostAndPort.of(ipStr, hostAndPort.getPort());
                    }
                    return hostAndPort;
                });
    
        ClientResources clientResources = ClientResources.builder()
                .socketAddressResolver(resolver)
                .build();
    

    然后通过LettuceClientConfiguration.clientResources方法设置,生菜正常工作。

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 2021-01-01
      • 2018-12-31
      • 1970-01-01
      • 2022-08-03
      • 2017-09-22
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多