Что такое кеширование первого и второго уровней в спящем режиме?

Может кто-нибудь объяснить простыми словами, что кеширование первого и второго уровней в спящем режиме?

Ответ 1

1.1) Кэш первого уровня

Кэш первого уровня всегда ассоциируется с объектом сеанса. Hibernate использует этот кеш по умолчанию. Здесь он обрабатывает один транзакция за другой, означает, что не обрабатывается одна транзакция многими раз. В основном это уменьшает количество SQL-запросов, необходимых для генерировать в рамках данной транзакции. Это вместо обновления после каждая модификация, выполненная в транзакции, обновляет транзакцию только в конце транзакции.

1.2) Кэш второго уровня

Кэш второго уровня всегда ассоциируется с объектом Session Factory. При выполнении транзакций между ними загружается объектов на уровне сеанса Factory, так что эти объекты будут доступный для всего приложения, не связанный с одним пользователем. поскольку объекты уже загружаются в кеш, когда объект возвращенный запросом, в то время не нужно искать базу данных сделка. Таким образом работает кеш второго уровня. Здесь мы можем использовать кеш уровня запросов.

Цитата из: http://javabeat.net/introduction-to-hibernate-caching/

Ответ 2

Там довольно хорошее объяснение кэширования первого уровня в блоге Streamline Logic.

В принципе, кеширование первого уровня происходит на основе каждого сеанса, так как кэширование второго уровня может использоваться совместно несколькими сеансами.

Ответ 3

Вот некоторые основные объяснения спящего режима кэша...

Кэш первого уровня связан с объектом "session". Объем объектов кеша имеет сеанс. Когда сеанс закрыт, кешированные объекты исчезают навсегда. Кэш первого уровня включен по умолчанию, и его нельзя отключить. Когда мы запрашиваем объект в первый раз, он извлекается из базы данных и хранится в кеше первого уровня, связанном с сеансом спящего режима. Если мы снова запросим тот же объект с тем же самым объектом сеанса, он будет загружен из кеша, и запрос sql не будет выполнен. Загруженный объект может быть удален из сеанса с использованием метода evict(). Следующая загрузка этого объекта снова вызовет вызов базы данных, если он был удален с помощью метода evict(). Весь кеш сеанса можно удалить с помощью метода clear(). Он удалит все объекты, хранящиеся в кеше.

Кэш второго уровня отличается от кеша первого уровня, который доступен для использования в глобальном масштабе в сеансе factory. кеш второго уровня создается в сеансе factory и доступен для использования во всех сеансах, которые создаются с использованием этого конкретного сеанса factory. Это также означает, что после закрытия сеанса factory весь связанный с ним кеш и диспетчер кэша также закрываются. Всякий раз, когда сеанс гибернации пытается загрузить объект, в самом первом месте он ищет кэшированную копию сущности в кеше первого уровня (связанную с определенной сессией спящего режима). Если кешированная копия сущности присутствует в кеше первого уровня, она возвращается как результат метода загрузки. Если в кэше первого уровня нет кэшированной сущности, тогда кэш второго уровня будет искать кешированный объект. Если кэш второго уровня имеет кэшированный объект, он возвращается как результат метода загрузки. Но, прежде чем возвращать объект, он также сохраняется в кеше первого уровня, так что следующий вызов метода загрузки для объекта будет возвращать объект из кеша первого уровня, и снова не нужно будет переходить к кэшу второго уровня. Если сущность также не найдена в кеше первого уровня и кеше второго уровня, тогда выполняется запрос базы данных, и сущность хранится в обоих уровнях кэша, прежде чем вернуться в качестве ответа метода load().

Ответ 4

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

поэтому вопросы всей этой проблемы - использование кэша L2, связанного с объектами сеанса factory. это уменьшает время, затрачиваемое на поездки в базу данных, что в конечном итоге увеличивает время отклика приложения.

Ответ 6

Кэш первого уровня

Объект сеанса содержит данные кэша первого уровня. Он включен по умолчанию. Данные кэша первого уровня будут недоступны для всего приложения. Приложение может использовать много объектов сеанса.

Кэш второго уровня

Объект SessionFactory содержит данные кэша второго уровня. Данные, хранящиеся в кеше второго уровня, будут доступны для всего приложения. Но мы должны включить его явно.

Ответ 7

В кеше второго уровня файлы домена hbm могут иметь ключ изменчивый и значение false. Например,  В этом классе домена часть продолжительности в день остается постоянной как универсальная истина. Таким образом, он может быть помечен как неизменный в приложении.