Код: Выделить всё
public interface ExternalSystem {
List getObjects(List externalIds);
void updateObjects(List updates);
}
В реализации сервиса я могу просто поместить пружинные аннотации:
Код: Выделить всё
@Cacheable("cache-external")
List getObjects(List externalIds) {}
@CacheEvict(cacheNames="cache-external", allEntries=true)
void updateObjects(List updates);
- Call#1 getObjects([1,2,3,4]) -> кеш, помещенный по ключу [1,2,3,4]
- Call#2 getObjects([1,2,3,4,5]) -> кеш, помещенный клавишей [1,2,3,4,5]
- Call#3 getObjects([6,7,8,9]) -> кеш, помещенный клавишей [6,7,8,9]
- Call#4 updateObjects(1) -> удалить все кеши, но третий кеш не содержит 3
Upd. Я нашел два похожих вопроса:
- spring-cache-abstraction-with-multi-value-queries
- using-spring-cache-on-methods-that-take-an-array-or-collection
- spring-cacheable-methods-with-lists
Вот что-то похожее на то, что я хочу, за исключением того, что я буду помещать в кеш пары String и ExternalDTO для каждого элемента в коллекция.
Кэширование-списка-в-список на уровне элемента
Мобильная версия