У меня есть служба, которая вызывает внешнюю систему для получения некоторых объектов по их внешнему идентификатору, а также для отправки их обратно на обновление. Вместо извлечения объектов один за другим существуют методы более общего назначения:
Call#4 updateObjects(1) -> удалить все кеши, но третий кеш не содержит 3
< /ol>
Итак, вопрос в том, как реализовать пользовательская стратегия (я предполагаю, что это невозможно из коробки), которая будет удалять только те записи, которые действительно должны быть удалены, и сделает ключи такими, чтобы пересекающиеся объекты извлекались из кеша?
Обновление. Я нашел два похожих вопроса:
spring-cache- абстракция с запросами с несколькими значениями
Upd2.
Вот что-то похожее на то, что я хочу, за исключением того, что я помещу в пары кеша String и ExternalDTO для каждого элемента в коллекция.
Кэширование-списка-в-список на уровне элемента
У меня есть служба, которая вызывает внешнюю систему для получения некоторых объектов по их внешнему идентификатору, а также для отправки их обратно на обновление. Вместо извлечения объектов один за другим существуют методы более общего назначения:
[code]public interface ExternalSystem { List getObjects(List externalIds);
void updateObjects(List updates); } [/code]
Я хотел бы поместить кеш поверх вызовов ExternalSystem, потому что они довольно дороги.
В реализацию сервиса я могу просто поставить пружинными аннотациями:
[code]@Cacheable("cache-external") List getObjects(List externalIds) {}
Однако такой кеш будет вести себя очень плохо, если у меня много пересечений между внешними идентификаторами, т. е.
[list] [*]Вызов №1 getObjects([1,2,3,4]) -> кеш, помещенный по клавише [1,2,3,4] [*]Вызов #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 < /ol>
Итак, вопрос в том, как реализовать пользовательская стратегия (я предполагаю, что это невозможно из коробки), которая будет удалять только те записи, которые действительно должны быть удалены, и сделает ключи такими, чтобы пересекающиеся объекты извлекались из кеша?
[b]Обновление.[/b] Я нашел два похожих вопроса:
[*]spring-cache- абстракция с запросами с несколькими значениями [*]использование-spring-cache-on-методов, которые-принимают-массив или-коллекцию [*]spring-cacheable-methods-with -lists [/list]
[b]Upd2.[/b] Вот что-то похожее на то, что я хочу, за исключением того, что я помещу в пары кеша String и ExternalDTO для каждого элемента в коллекция. Кэширование-списка-в-список на уровне элемента