Вот несколько основных объяснений кибернетического кэша ...
Кэш первого уровня связан с объектом «сеанс».
Область действия объектов кэша имеет сессию. Как только сессия закрыта, кэшированные объекты исчезают навсегда.
Кэш первого уровня включен по умолчанию, и вы не можете его отключить.
Когда мы запрашиваем объект в первый раз, он извлекается из базы данных и сохраняется в кэше первого уровня, связанном с сеансом гибернации.
Если мы снова запросим тот же объект с тем же объектом сеанса, он будет загружен из кэша, и никакой SQL-запрос не будет выполнен.
Загруженный объект можно удалить из сеанса, используя метод evict()
. Следующая загрузка этой сущности снова вызовет базу данных, если она была удалена с использованием метода evict()
.
Весь кэш сеанса может быть удален методом clear()
. Это удалит все сущности, хранящиеся в кеше.
Кэш второго уровня отличается от кэша первого уровня, который доступен для глобального использования в области фабрики сеансов.
Кэш второго уровня создается в области фабрики сеансов и доступен для использования во всех сеансах, созданных с использованием этой конкретной фабрики сеансов.
Это также означает, что после закрытия фабрики сеансов весь кэш, связанный с ним, умирает, и менеджер кэша также закрывается.
Всякий раз, когда сеанс hibernate пытается загрузить объект, самое первое место, где он ищет кэшированную копию объекта в кэше первого уровня (связан с конкретным сеансом hibernate).
Если кэшированная копия сущности присутствует в кеше первого уровня, она возвращается как результат метода загрузки.
Если в кэше первого уровня нет кэшированной сущности, то для кэшированной сущности ищется кэш второго уровня.
Если кэш второго уровня имеет кэшированную сущность, он возвращается как результат метода load. Но перед возвратом объекта он также сохраняется в кэше первого уровня, так что при следующем вызове метода загрузки для объекта объект будет возвращен из самого кэша первого уровня, и больше не потребуется возвращаться в кэш второго уровня.
Если объект не найден в кэше первого уровня и кэше второго уровня, то выполняется запрос к базе данных, и объект сохраняется на обоих уровнях кэша, а затем возвращается как ответ метода load()
.