В чем принципиальные отличия Spring Cache и Hibernate Cache?

Помогите понять - в чем принципиальные отличия Spring Cache и Hibernate Cache? Помимо возможностей включения 2-го и 3-го уровней в Hibernate.

К примеру - в своем текущем приложении на Spring Boot вставил аннотацию @EnableCache, плюс поставил аннотацию @Cacheable над методами сервиса, результаты которых подлежат кешированию. Но не совсем пойму - хранится ли кэш этих двух фреймворков в разных местах; и т.д.


Ответы (1 шт):

Автор решения: damintsew

Spring Cache и Hibernate cache это просто разные абстракции для реализации кеширования.

  • Spring Cache

Используется "внутри" программ для кеширования результатов вызова различных методов. Например здесь реализовано кеширование возвращаемого результата адреса для заданных значений Customer :

@CacheConfig(cacheNames={"addresses"})
public class CustomerDataService {

    @Cacheable
    public String getAddress(Customer customer) {...}
  • Hibernate Cache

Это другая абстракция для реализации кеширования при обращении к БД. По умолчанию Хибернейт имеет сессионный Кеш (когда в рамках одной сессии хранятся результаты вызова запросов). Это реализовано внутренними средствами Хибернейта.

Но у него также есть возможность включить 2й уровень кеширования для сохранения возвращаемого результата из БД (для ускорения работы приложения).


Оба эти механизма предоставляют только абстракцию, а вот имплементация кеширования реализуется в других проектах, например:

  • JCacheCacheManager
  • EhCacheCacheManager
  • CaffeineCacheManager

В Spring Cache также есть простые имплементации для реализации кеширования:

  • SimpleCacheManager
  • ConcurrentMapCacheManager

Но не совсем пойму - хранится ли кэш этих двух фреймворков в разных местах; и т.д

Можно для всего приложения поставить одну общую имплементацию для всех Кешей и один общий Кеш менеджер. Но физически Спринг Кеш и Кеш для Хибернейта будет лежать в разных объектах.

→ Ссылка