Каковы основные преимущества/различия [пружинный кеш против простого кэширования карты]

Поэтому я недавно добавил использование Spring-кэша в свои сервисы, чем больше я смотрю, тем больше я чувствую, что это просто ограничивает то, что я могу сделать.

Мои первоначальные впечатления заключаются в том, что в нем меньше кода, мне не нужно писать столько кода. Это плюс.

Отрицательным является то, что я не могу контролировать то, что кешируется, использование идентификаторов и наборов сущностей, передаваемых в такие методы, как saveAll и т. д., а также некоторые методы, которые выполняют более сложные запросы.

Есть ли что-то, чего мне не хватает, когда дело доходит до весеннего кеша? Некоторая магия в фоновом режиме или это действительно так же просто, как создание нескольких параллельных хэш-карт и размещение в них данных из сервисов, а также извлечение или обновление данных на основе вызовов методов сервиса?

Я 50/50 против использования моей собственной реализации кэширования по сравнению с spring-cachce. Каковы риски, с которыми я могу столкнуться, когда spring-cache уже решает для меня?

Этот вопрос основан на предположении, что используется диспетчер кеша по умолчанию.


person Tomas Bisciak    schedule 16.05.2019    source источник


Ответы (1)


Spring по умолчанию использует ConcurrentHashMap по умолчанию, но если вы включите Caffeine (https://github.com/ben-manes/caffeine) или Hazelcast в пути к классам, вы получаете другого поставщика кеша. Прелесть этого в том, что вы можете настроить кеш вне вашего приложения без какого-либо кода.

person Christian Ullenboom    schedule 16.05.2019
comment
Да, я знаю, как легко сменить провайдера, но что меня озадачивает, какие накладные расходы это приносит и какие другие преимущества это дает мне по сравнению с использованием моей собственной реализации, которую намного легче контролировать. Аннотации могут кэшироваться либо в кэше всего списка, если список используется в качестве параметра, либо ничего. Это отстой. Я понимаю, что преимущества внешней конфигурации звучат хорошо. То же самое можно сделать с помощью свойств def в application.properties. - person Tomas Bisciak; 16.05.2019
comment
Если фреймворк помогает мне безопаснее работать и сокращать объем кода, я бы полагался на фреймворк. Для меня это основная идея Spring Boot — упростить жизнь разработчика. Вы можете легко контролировать, что поступает в кеш, с помощью атрибутов аннотаций docs.spring.io/spring/docs/current/javadoc-api/org/, например condition. - person Christian Ullenboom; 16.05.2019
comment
Да, я понимаю, но в отношении потери контроля я имел в виду нечто вроде следующего stackoverflow.com/questions/56139460/ . Сейчас я изучаю кеш caffine, я попробую его и расширим функциональность на другие сервисы. Если все работает нормально, я думаю, я могу жить с меньшим контролем. - person Tomas Bisciak; 16.05.2019
comment
На самом деле это видео отвечает на многие вопросы, которые у меня были youtube.com/watch?v=3McRajvmdlw Поддержка слабых ключей, предварительно выделенная емкость, обновление, запись статистики, истечение срока действия и т. д. Кажется, есть еще реализации кэширования, предоставляемые поставщиками, о которых я знал. - person Tomas Bisciak; 16.05.2019