如何用Lettuce集群客户端连接启用集群的Azure Redis Cache实例?
问题分析与解决方案
你的代码存在两处关键问题,导致无法连接Azure Redis Cluster:
1. 未启用SSL加密连接
Azure Redis Cache默认强制要求SSL加密连接,你的代码使用普通redis://未加密协议,而你提供的端口14489大概率是SSL端口,必须启用SSL才能建立有效连接。
2. 未适配Azure Redis Cluster的拓扑访问限制
Azure Redis Cluster的内部节点使用私有IP地址,外部客户端无法直接访问这些节点。Lettuce默认会自动获取集群拓扑并尝试连接所有节点,这会因无法访问私有节点而触发报错。
修正后的代码
// 启用SSL并配置正确连接参数 RedisURI redisUri = RedisURI.Builder.redis("redis-xxxxxxxxx.us-east-1-mz.ec2.cloud.rlrcp.com", 14489) .withPassword("password") // 注意修正原代码中的拼写错误passwaord .withSsl(true) // 关键:启用SSL加密 .build(); // 配置Lettuce禁用自动拓扑刷新,避免尝试连接私有节点 RedisClusterClient clusterClient = RedisClusterClient.create(redisUri); ClusterTopologyRefreshOptions topologyOptions = ClusterTopologyRefreshOptions.builder() .disablePeriodicRefresh() .disableAdaptiveRefreshTrigger() .build(); clusterClient.setOptions(ClusterClientOptions.builder() .topologyRefreshOptions(topologyOptions) .build()); StatefulRedisClusterConnection<String, String> connection = clusterClient.connect();
额外检查项
- 确认Azure Redis Cache的非SSL端口是否已开启(默认关闭),若使用SSL端口则必须保持
withSsl(true)配置。 - 验证防火墙和网络安全组规则,确保客户端所在网络能访问Azure Redis Cache的公网地址与端口。
内容的提问来源于stack exchange,提问作者Kapilraaj Perinpanayagam
相关产品推荐
相关产品推荐

