В чем разница между кэшем L1 и L2 в веб-приложениях с Hibernate в качестве механизма ORM? - PullRequest
9 голосов
/ 14 декабря 2010

Мне просто нужна некоторая общая информация о стандартной цели использования кэша L1 и кэша L2.

Мне любопытно, потому что я исследую систему с терракотой в качестве кэша 2-го уровня и обнаружил, чтотакже имеет кэш 1-го уровня.

Ответы [ 5 ]

16 голосов
/ 15 июня 2012

L1 Cache - это кэш, который существует в сеансе Hibernate, и этот кэш не используется совместно потоками.В этом кэше используется собственное кэширование Hibernate.

L2 Cache - это кэш, который сохраняется после сеанса Hibernate и может быть разделен между потоками.Для этого кэша вы можете использовать либо реализацию кэширования, которая поставляется с Hibernate, например EHCache, либо что-то еще, например, JBossCache2

.
3 голосов
/ 14 декабря 2010

В JPA / Hibernate (и других аналогичных инструментах ORM) кэш L1 - это кэш транзакций, то есть сущности, хранящиеся с момента открытия транзакции до ее закрытия.Это почти никогда не общий кеш (другие потоки не могут его использовать).В JPA это обычно будет выполняться EntityManager.

Кэш L2 - это полный (обычно) общий кэш.Если у вас есть несколько потоков / запросов, извлекающих данные, они могут использовать объекты, которые уже были получены другими потоками, которые все еще находятся в кэше.В JPA это обычно будет поддерживаться EntityManagerFactory.

2 голосов
/ 14 декабря 2010

GaryF не ошибается, но технически не прав :-) Антон более прав в этом, но дополнит свой ответ:

Кэш первого уровня: это «кеш», в котором хранятся все сущности.известный конкретным сеансом.Итак, если у вас есть 3 транзакции внутри этого сеанса, он будет содержать все сущности, затронутые всеми тремя транзакциями.Он очищается, когда вы закрываете сеанс или когда вы выполняете «чистый» метод.

Кэш второго уровня: это «настоящий» кэш, который делегируется внешнему провайдеру, такому как Infinispan.В этом кеше вы имеете полный контроль над содержимым кеша, что означает, что вы можете указать, какие записи должны быть исключены, какие должны храниться дольше и так далее.

0 голосов
/ 17 сентября 2018

L1 По умолчанию включено, вам нужно добавить стороннюю библиотеку, такую ​​как EH кеш, Redis для L2.

Вы не можете отключить L1 в спящем режиме.

0 голосов
/ 14 декабря 2010

Если в Hibernate есть что-то похожее на NHibernate (то есть, кроме как наоборот), Session - это кэш первого уровня. За исключением того, что это не кеш в общем смысле, а карта идентичности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...