public interface ExternalSystem {
List getObjects(List externalIds);
void updateObjects(List updates);
}
< /code>
Я хотел бы поставить кэш на вершину вызовов Evenerwestystem, потому что они довольно дорогие.@Cacheable("cache-external")
List getObjects(List externalIds) {}
@CacheEvict(cacheNames="cache-external", allEntries=true)
void updateObjects(List updates);
< /code>
Тем не менее, такой кэш будет вести себя очень плохо, если у меня будет много пересечения между Exmervidiods, то есть < /p>
- Call#1 getObjects ([1,2,3,4]) -> Cache, установленное по [1,2,3,4,4]. getObjects ([1,2,3,4,5]) -> Кэш, поставленное [1,2,3,4,5] ключ < /li>
Вызовы#3 getObjects ([6,7,8,9]) -> Кэш, поставленные [6,7,8,9] Ключ < /li>
< /ol>
Итак, вопрос заключается в том, как реализовать пользовательскую стратегию (я предполагаю, что это не выполнимо из коробки), которые выселяют только те записи, которые действительно должны быть выселены и сделают ключи таким образом, что пересекающиеся объекты получают из кеша? questions:
spring-cache-abstraction-with-multi-value-queries - using-spring-cache-on-methods-that-take-an-array-or-collection
- spring-cacheable-methods-with-lists
Вот что-то похожее на то, что я хочу, за исключением случаев, когда я помещаю в пары кэша строки и exteraldto для каждого элемента в коллекции.
Уровень элемента-cachging-of-list-list < /p>
Подробнее здесь: https://stackoverflow.com/questions/373 ... of-the-key