что сохраняет кэш hibernate? - PullRequest
       4

что сохраняет кэш hibernate?

6 голосов
/ 02 ноября 2010

Привет: Я запутался в том, что кешируется в спящем кеше.

Из документации я знаю, что в спящем режиме есть типы кэша.

Первый уровень : уровень транзакции. Похоже, что объект, который должен сохраняться в сеансе, кэшируется здесь.

Кэш второго уровня : я действительно понятия не имею об этом кеше, из API, он сказал, что этот кеш работает на уровне сеанса ... Не могу понять.

Кеш запросов : Это легко понять для меня (возможно, я ошибаюсь). Он кэширует параметр запроса вместе со связанным объектом.

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

Кто-нибудь может дать мне более подробную информацию?

Кстати, я плохо разбираюсь в работе с sql / jdbc, поэтому я также хочу узнать, как мне узнать о sql / jdbc, чтобы узнать больше о hibernate (какие-нибудь документы?)? Я не хочу быть просто спящим пользователем, поскольку это всего лишь инструмент, и я хочу научиться чему-то этому замечательному фреймворку. :)

1 Ответ

4 голосов
/ 02 ноября 2010

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

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

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

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

(адаптировано из FAQ по NH)

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

Этот кеш находится выше кеша одного сеанса. С помощью этого кэша вы сохраняете много обращений в базу данных, так как каждый раз, когда кто-либо в любом сеансе загружает определенный объект, он остается в кэше, поэтому следующий запрос (из любого другого сеанса) получит его из кэша.

Для использования L2 Cache вам потребуется поставщик кеша, такой как SysCache или Memcache. Эти парни будут хранить значения кэшированных сущностей в виде массива строк, хэшированных идентификатором сущности. Важно отметить, что кешируется не объект .net, а только его значения.

Говорят, что он привязан к фабрике сеансов, потому что кеш будет работать для сеансов, созданных определенной фабрикой сеансов, поэтому сеансы, созданные разными фабриками сеансов, не будут совместно использовать кеш. Вам понятна концепция фабрики сессий?

Кэш запросов

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

FAQ NHiernate о кэше:

https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

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