Spring Cache Abstraction с многозначными запросами
Поддерживает ли абстракция Spring Cache многозначные запросы?
Вместо:
@Cacheable ("books") публичная книга findBook(ISBN isbn) {...}
Представьте себе запрос, который выглядит так:
@Cacheable ("books") общедоступный список
Это поддерживается? Будет ли он индивидуально кэшировать каждую книгу, возвращенную в коллекции?
Спасибо!
2 ответа
Spring Cache хранит весь результат под одним ключом кэша, поэтому невозможно сохранить отдельно каждый объект, возвращенный в коллекции. В случае кеширования результата JPA Query вы можете использовать кеш запросов. В других случаях, если вам необходим memcached, вы можете попробовать аннотацию Simple Spring Memcached и ReadThroughMultiCache. Каждый элемент коллекции будет храниться индивидуально в выделенном ключе кэша.
Кеш запросов действительно может кэшировать список результатов для каждого запроса. Имейте в виду, что в кеше запросов будут сохранены только идентификаторы возвращенных объектов. Кэш сущностей должен быть включен отдельно для самого возвращаемого типа сущности, если вы хотите, чтобы свойства также кэшировались.
Работал у меня. Вот ссылка на мой ответ. /questions/19524109/spring-cachejsr107-argument-listcollection-kak-chast-klyucha/55404654#55404654
TL:DR
@Cacheable(cacheNames = "test", key = "#p0")
public List<String> getTestFunction(List<String> someIds) {
В моем примере используется String, а не настраиваемый объект.
Надеюсь, это хоть немного поможет:)