Spring кэш/jsr107: аргумент списка/коллекции как часть ключаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring кэш/jsr107: аргумент списка/коллекции как часть ключа

Сообщение Anonymous »

У меня есть служба, которая вызывает внешнюю систему для получения некоторых объектов по их внешнему идентификатору, а также для отправки их обратно на обновление. Вместо извлечения объектов один за другим существуют методы более общего назначения:

Код: Выделить всё

public interface ExternalSystem {
List getObjects(List externalIds);

void updateObjects(List updates);
}
Я хотел бы поместить кеш поверх вызовов ExternalSystem, потому что они довольно дороги.

В реализацию сервиса я могу просто поставить пружинными аннотациями:

Код: Выделить всё

@Cacheable("cache-external")
List getObjects(List externalIds) {}

@CacheEvict(cacheNames="cache-external", allEntries=true)
void updateObjects(List updates);
Однако такой кеш будет вести себя очень плохо, если у меня много пересечений между внешними идентификаторами, т. е.
  • Вызов №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>

    Итак, вопрос в том, как реализовать пользовательская стратегия (я предполагаю, что это невозможно из коробки), которая будет удалять только те записи, которые действительно должны быть удалены, и сделает ключи такими, чтобы пересекающиеся объекты извлекались из кеша?

    Обновление. Я нашел два похожих вопроса:
  • spring-cache- абстракция с запросами с несколькими значениями
  • использование-spring-cache-on-методов, которые-принимают-массив или-коллекцию
  • spring-cacheable-methods-with -lists
Upd2.
Вот что-то похожее на то, что я хочу, за исключением того, что я помещу в пары кеша String и ExternalDTO для каждого элемента в коллекция.
Кэширование-списка-в-список на уровне элемента

Подробнее здесь: https://stackoverflow.com/questions/373 ... of-the-key
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»