我正在为我的微服务之一使用Spring Boot。它使用spring数据库来访问AWS弹性缓存(redis)。
我的微服务-Spring引导-Spring数据库-Jedis Connection。
Redis以非集群模式配置,并且有两个节点,一个是主节点,另一个是只读副本。我的服务在EC2实例上运行。该服务和AWS Elastic-Cache(r4.large)节点位于同一VPC中。
由于有两个Redis缓存节点(主节点和副本节点),因此AWS上有两个可用端点。我的服务始终连接到主节点。
问题1:由于我的服务始终连接到主节点,因此我看到也有一些到副本实例的连接。这是怎么发生的?我正在使用单个池进行Redis连接,这些连接仅指向主要端点。我观察到的是,与主节点建立了6/10的连接,对副本实例建立了4/10的连接。但是我的服务根本不与副本实例对话。
问题2:我发现尝试从Redis取值时会有性能延迟(最坏情况下需要800毫秒)。我浏览了很多以寻求更好的解决方案。有些建议使用Lettuce库(选项1),有些建议使用单独的池用于只读副本,另一个建议使用池用于主节点(选项2)。如果使用option-2,将来如果我需要一个以上的副本,则需要另一个连接池来指向该新副本,然后需要更改代码。似乎不是很好的解决方案。
您能否建议其他方法来提高我的应用程序从缓存中获取值的性能?
谢谢, 哈里