我有一个使用 spring-boot-starter-data-redis 的 Spring Boot Java 应用程序,并且我有一个在开发环境中以无服务器模式运行的 AWS Elasticache Redis 缓存设置。在我的 application.properties 中,我设置了 spring.redis.host 和 spring.redis.port 的值。我看到启动时主机和端口值设置正确,并且应用程序可以正常启动。但是,当我调用使用缓存的端点时,它会抛出“由以下原因引起:redis.clients.jedis.exceptions.JedisConnectionException:无法连接到解析为 DNS 名称的任何主机。”我认为这是因为AWS Elasticache Redis缓存只能由同一VPC中的应用程序访问。如何将本地运行的应用程序连接到不在本地运行的 AWS Elasticache Redis 缓存?
如何将本地运行的应用程序连接到不在本地运行的 AWS Elasticache Redis 缓存?
您需要在与 Redis 实例相同的 VPC 中创建 NLB,并以某种方式保护对此 NLB 的外部访问。
最简单(但不太安全)的方法是将安全组附加到 NLB,并仅允许从您的 IP 进行访问。 仅当您拥有未与您不信任的其他计算机共享的静态外部 IP 地址时才执行此操作。 这排除了移动提供商和大多数家庭互联网提供商。
另一种选择是设置 VPN。
AWS 还支持 Redis 身份验证,但是,大多数客户端库不支持开箱即用,因此如果您想使用它,您需要对应用程序代码进行一些“重要的更改”。 请记住,典型的 Redis 使用模式对网络延迟非常敏感。如果您仅使用 Redis 进行临时缓存并且不需要与其他计算机共享缓存,那么您最好在 Docker 容器中设置本地实例。