NHibernate é uma solução popular de mapeamento objeto-relacional (ORM) para .NET. E é frequentemente usado em ambientes de alta transação, onde os aplicativos enfrentam gargalos de desempenho e escalabilidade devido ao banco de dados e ao armazenamento de dados.
Para lidar com isso, o NHibernate fornece dois tipos de cache, Cache de Primeiro Nível (Cache de 1º Nível) e Cache de Segundo Nível (Cache de 2º Nível). O cache de primeiro nível é integrado e vinculado ao "Objeto de sessão" do usuário, enquanto o cache de segundo nível fornece uma arquitetura conectável e está vinculado ao nível "Fator de sessão" (ou seja, no nível do aplicativo). Isso significa que o cache não é afetado pela entrada e saída de sessões do usuário. Você pode conectar um cache de terceiros como NHibernate Second Level Cache.
NCache é um cache distribuído extremamente rápido e linearmente escalonável para aplicativos .NET. NCache permite adicionar mais servidores de cache para lidar com cargas de transações maiores. Você pode conectar NCache como Cache de segundo nível do NHibernate.
Como parte da arquitetura do provedor de cache de segundo nível NHibernate, NCache implementou ICacheProvider
e ICacheinterfaces
. Como resultado, você pode configurar NCache como NHibernate Second Level Cache sem qualquer programação e simplesmente através de alterações no arquivo de configuração.
Você simplesmente modifica seu app.config
e especificar NCache como seu provedor de cache de segundo nível e adicione uma propriedade para ele. Você também habilita o cache de segundo nível e outros subcaches do NHibernate em app.config. Aqui está um exemplo de app.config
alterar:
<hibernate-configurationxmlns="urn:nhibernate-configuration-2.2">
...
<session-factory>
...
<property name="cache.provider_class">
Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider,
Alachisoft.NCache.Integrations.NHibernate.Cache
</property>
<property name="cache.use_second_level_cache">
true
</property>
...
</session-factory>
</hibernate-configuration>
<appSettings>
<add key="ncache.application_id"
value="myapp" />
</appSettings>
NCache permite que cada região do NHibernate seja configurada de forma diferente com suas próprias propriedades para armazenar objetos em cache. Para este propósito NCache tem um arquivo de configuração chamado NCacheNHibernate.xml
, que contém todas as configurações de região usadas pelo cache de segundo nível do NHibernate. A seguir está um exemplo desse arquivo de configuração:
<configuration>
<application-config application-id="myapp"
enable-cache-exception="true"
default-region-name="default"
key-case-sensitivity="false">
<cache-regions>
<region name="default"
cache-name="mycache"
priority="default"
expiration-type="none"
expiration-period="0" />
<region name="AbsoluteExpirationRegion"
cache-name="myRegioncache"
priority="Default"
expiration-type="sliding"
expiration-period="180" />
</cache-regions>
...
</application-config>
</configuration>
NCache é um poderoso cache distribuído para .NET e oferece muitos recursos avançados. Um desses recursos é a sincronização do banco de dados, onde o cache rastreia as alterações do banco de dados e invalida um item armazenado em cache ou o recarrega se seus dados correspondentes forem alterados no banco de dados.
Você pode configurar o provedor de cache de segundo nível NHibernate para NCache para usar a sincronização de banco de dados. Basta modificar NCacheNHibernate.xml
arquivo de configuração da seguinte forma:
<configuration>
<application-config application-id="myapp"
enable-cache-exception="true"
default-region-name="default"
key-case-sensitivity="false">
...
<database-dependencies>
<dependency entity-name="nhibernator.BLL.Customer"
type="sql"
sql-statement="SELECT ContactName FROM dbo.Customers
WHERE CustomerID =?"
cache-key-format="depdency.customer:[pk]"/>
</database-dependencies>
</application-config>
</configuration>
O NHibernate fornece um recurso de cache de consultas onde armazena os resultados das consultas no cache de segundo nível. Você pode ativar o NHibernate Query Cache em app.config
arquivos de configuração da seguinte forma:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
...
<session-factory>
...
<property name="cache.use_query_cache">
true
</property>
...
</session-factory>
</hibernate-configuration>
A consulta junto com as chaves primárias dos conjuntos de resultados é armazenada em uma região de consulta padrão chamada NHibernate.Cache.StandardQueryCache
. Porém, os objetos recuperados como resultado da consulta são armazenados em cache em suas respectivas regiões. Além disso, ativar o cache de consulta não armazena em cache cada consulta por padrão. Em vez disso, você deve definir cada consulta como armazenável em cache no código da seguinte forma:
IQuery qry = session.CreateQuery("from Customer c").SetCacheable(true);
Se o seu aplicativo NHibernate estiver sendo executado em um ambiente multiservidor, você precisará de cache distribuído como NCache como provedor de cache de segundo nível do NHibernate pelos seguintes motivos: