Моё весеннее загрузочное приложение имеет множество сложных объектов типа 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 {....