Читайте данные из Redis из разных приложений - PullRequest
0 голосов
/ 29 сентября 2018

Мы используем serviceA для извлечения данных из базы данных и помещения их в redis (мы используем Spring data / Jedis с методом saveAll).

Существует еще одна служба B, которая должна получить все объекты из одного экземпляра redis.

Структура объекта из serviceA точно такая же, как и в serviceB.У нас проблемы, потому что serviceA выполняет свою работу нормально, но служба B извлекает все данные с помощью метода findAll (), предоставленного из данных Spring, но все они имеют нулевые значения.

Примечание. Мы провели тестзагрузка всех данных из serviceB, поэтому мы получили все объекты без проблем.Единственное отличие, которое я вижу из обоих хэшей на redis, - это поле _class, которое генерируется автоматически при загрузке данных из serviceA.

Не могли бы вы помочь мне с этим?

1 Ответ

0 голосов
/ 30 сентября 2018

Убедитесь, что вы последовательны в том, как ключи сериализуются между serviceA и serviceB.Мне кажется, serviceA записывает данные для данного сериализованного ключа, а затем serviceB пытается извлечь данные для другого сериализованного ключа.Если, например, вы используете Джексона как в «serviceA», так и в «serviceB», убедитесь, что он настроен одинаково.

Redis по сути является распределенным Map<String, String>, поэтому, если есть разницакак serviceA сериализует данные и как serviceB сериализует данные (например, один из них хранит имя класса в сериализованном объекте, а другой не хранит его), вы получите разные ключи String для одной и той же Javaключевой объект (и служба, считывающая данные, получит нулевое значение в ответ на findAll, поскольку в Redis ничего не сохраняется в ключе, который он запрашивает).

...