描述
Spring Data Redis是否可以使用Elasticache的配置端点来执行所有集群操作(即读取、写入等)?
详细描述
我有一个Spring Boot应用程序,它使用Redis集群作为数据存储。Redis集群托管在启用集群模式的AWS Elasticache上。Elasticache集群有3个碎片,分布在12个节点上。集群运行的Redis版本为6.0。
该服务没有正确写入或从群集中检索数据。每当执行这些操作时,我都会收到类似以下的消息:
io.lettuce.core.RedisCommandExecutionException: MOVED 16211 10.0.7.254:6379
在搜索互联网时,似乎没有为群集正确配置服务。修复方法似乎是将spring.redis.cluster.nodes属性设置为Elasticache集群中所有节点的列表(请参阅此处和此处)。考虑到Elasticache配置端点应该用于所有读写操作,我觉得这是不必要的(参见"Finding Endpoints for a Redis(Cluster Mode Enabled)Cluster";此处的部分)。
我的问题是:Spring Data Redis是否可以像AWS文档描述的那样,使用Elasticache的配置端点来执行所有读取和写入?如果Spring Data Redis可以按照预期的方式使用配置端点,我宁愿不交出所有节点的列表。这对我来说似乎是一个严重的限制。
提前感谢!
以下是我发现的有效方法:
@Bean
public RedisConnectionFactory lettuceConnectionFactory()
{
LettuceClientConfiguration config =
LettucePoolingClientConfiguration
.builder()
.*your configuration settings*
.build();
RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration();
clusterConfig.addClusterNode(new RedisNode("xxx.v1tc03.clustercfg.use1.cache.amazonaws.com", 6379));
return new LettuceConnectionFactory(clusterConfig, config);
}
其中xxx是弹性缓存集群中的名称。