Как кэшировать сложный объект, такой как Map <String, List <Car>> в приложении Spring Boot - PullRequest
0 голосов
/ 17 мая 2018

Моё весеннее загрузочное приложение имеет множество сложных объектов типа Map<String, List<Car>>, которые мне нравится где-то кэшировать.

Я не хочу использовать статическую переменную в программе для этого, как будто приложение будет работать за балансировщиком нагрузки, каждый экземпляр может получать разные результаты из своего собственного кэша памяти, а изменения в одном приложении не будут действовать в другом.

Так что я смотрел на Redis и его клиент Jedis , но кажется, что мы можем кэшировать только элементы карты с типом <String, String>, но не более сложные элементы.

Я также проверил Spring's @Cacheableопция аннотации , но кажется, что этот сложный объект не кэшируется.См. Пример кода ниже.

Я задаюсь вопросом, каким должен быть правильный подход для кэширования таких сложных элементов.

Это код из попытки @Cacheable:

    public class ComplexObject implements Serializable {... getters & setters ...}

В классе обслуживания:

    @Cacheable(value = "customerCars", key = "#customerName")
    public ComplexObject buildCoblexObject(String customerName, CarsRepository carRepository) {
    ...
    System.out.printlin("here") // printed every time method is called with the same customerName
    }

В файле свойств: (простой или redis не кэширует элемент):

spring.cache.type=simple
#spring.cache.type=redis
#spring.redis.host=localhost
#spring.redis.port=6379

В классе приложения:

@SpringBootApplication
@EnableCaching
 public class MyApplication {....

1 Ответ

0 голосов
/ 18 мая 2018

Одним из возможных решений было бы использование хэша Redis.Его ключом будет имя вашего сложного объекта.Ключи его свойств будут ключами карты.И List<Car> можно сериализовать с помощью JSON.

Если вам часто требуется выполнять итерации по всей этой карте, вы можете вместо этого сериализовать все Map<String, List<Car>> в JSON и сохранить их в виде единого ключа.Но обновление этого объекта займет значительное время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...