Spring Cache Abstraction с многозначными запросами

Поддерживает ли абстракция Spring Cache многозначные запросы?

Вместо:

@Cacheable ("books") публичная книга findBook(ISBN isbn) {...}

Представьте себе запрос, который выглядит так:

@Cacheable ("books") общедоступный список findBook (список isbns) {...}

Это поддерживается? Будет ли он индивидуально кэшировать каждую книгу, возвращенную в коллекции?

Спасибо!

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, а не настраиваемый объект.

Надеюсь, это хоть немного поможет:)

Другие вопросы по тегам