spring-boot - 使用spring boot data redis连接redis集群问题
问题描述
我使用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中使用它。欢迎任何解决方案,谢谢
解决方案
我已经得到了答案,所以让我们像这样定义一个 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方法中设置,生菜的正常工作。
推荐阅读
- google-apps-script - 查询语言参考:按日期请求
- swift - 如何根据推送通知的类型打开 Viewcontroller?
- amazon-web-services - 当我将 .war 文件推送到 s3 时,如何在从 s3 触发的 codedeploy 中自动部署?
- c# - 从在 C# 中的单独线程上运行的外部类更新 Windows Form Control (listview)
- php - 在 php 中为 Instagram api 设置代理
- python-3.x - 如何编写 Pytest 来检查命令行解释器生成的文件夹结构是否符合预期?
- ionic3 - 为什么可以在 iOS 上运行的应用程序不能在 android 上运行。?onic3 ?imagepicker 错误
- python - 从 CapsNet 中提取分类模块
- c++ - 铸造一个空指针来检查内存对齐
- azure-devops - 使用 Bitbucket 的 Azure DevOps yaml 配置始终返回“禁止”