使用 Lettuce 为 ElastiCache 主/从配置 Spring Data Redis

HLi*_*Liu 3 java redis lettuce amazon-elasticache spring-data-redis

我有一个 Elasticache 设置,其中有一个主设备和两个从设备。我仍然不确定如何传入主从 RedisURI 列表来构造StatefulRedisMasterSlaveConnectionfor LettuceConnectionFactory。我只看到对具有单个主机和端口的独立配置的支持。

LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.SLAVE).build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(SettingsUtils.standaloneConfiguration(),configuration);
Run Code Online (Sandbox Code Playgroud)

我知道有一个类似的问题Configuring Spring Data Redis with Lettuce for Redis master/slave

但我认为它不适用于 ElastiCache 主/从设置,因为目前上述代码将尝试用于MasterSlaveTopologyProvider发现从属 ip。但是,从属 IP 地址无法访问。那么配置 Spring Data Redis 使其兼容主/从 ElastiCache 的正确方法是什么?在我看来,LettuceConnectionFactory需要获取端点列表并使用StaticMasterSlaveTopologyProvider才能工作。

小智 6

AWS 和 Lettuce 有了进一步的改进,可以更轻松地支持主/从。

AWS 最近发生的一项改进是,它推出了 Redis 读取器端点,可在副本之间分配负载:Amazon ElastiCache 推出 Redis 读取器端点

因此,使用Spring Data Redis连接到 Redis 的最佳方式是使用 Redis 集群的主端点(主节点)和读取器端点(用于副本)。

您可以从 AWS 控制台获取它们。这是示例代码:

@Bean
public LettuceConnectionFactory redisConnectionFactory() {
    LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
            .readFrom(ReadFrom.SLAVE_PREFERRED)
            .build();
    RedisStaticMasterReplicaConfiguration redisStaticMasterReplicaConfiguration =
            new 
     RedisStaticMasterReplicaConfiguration(REDIS_CLUSTER_PRIMARY_ENDPOINT, redisPort);
    redisStaticMasterReplicaConfiguration.addNode(REDIS_CLUSTER_READER_ENDPOINT, redisPort);
    redisStaticMasterReplicaConfiguration.setPassword(redisPassword);
    return new LettuceConnectionFactory(redisStaticMasterReplicaConfiguration, clientConfig);
}
Run Code Online (Sandbox Code Playgroud)