Я использую Spring boot для одного из моих микро сервисов.Он использует библиотеки данных Spring для доступа к AWS эластичному кешу (redis).
Мой микро сервис - Spring boot - Библиотека данных 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).Если я использую опцию 2, в будущем, если мне понадобится еще одна реплика, мне потребуется другой пул соединений, чтобы указать на эту новую реплику, и тогда потребуются изменения кода.Кажется, не очень хорошее решение.
Не могли бы вы предложить какой-либо другой подход, который улучшает производительность моего приложения при получении значений из кэша?
Спасибо, Хари