NHibernate est une solution de mappage objet-relationnel (ORM) populaire pour .NET. Et il est fréquemment utilisé dans des environnements à transactions élevées où les applications sont confrontées à des goulots d'étranglement en termes de performances et d'évolutivité en raison de la base de données et du stockage des données.
Pour gérer cela, NHibernate propose deux types de mise en cache, le cache de premier niveau (cache de 1er niveau) et le cache de deuxième niveau (cache de 2e niveau). Le cache de premier niveau est intégré et lié à « l'objet de session » de l'utilisateur, tandis que le cache de deuxième niveau fournit une architecture enfichable et est lié au niveau « facteur de session » (c'est-à-dire au niveau de l'application). Cela signifie que le cache n'est pas affecté par les sessions utilisateur qui vont et viennent. Vous pouvez brancher un cache tiers en tant que cache de deuxième niveau NHibernate.
NCache est un cache distribué extrêmement rapide et évolutif linéairement pour les applications .NET. NCache vous permet d'ajouter plus de serveurs de cache pour gérer des charges de transactions plus importantes. Vous pouvez vous connecter NCache en tant que cache de second niveau NHibernate.
Dans le cadre de l'architecture du fournisseur de cache de deuxième niveau NHibernate, NCache a mis en place ICacheProvider
ainsi que ICacheinterfaces
. En conséquence, vous pouvez configurer NCache comme NHibernate Second Level Cache sans aucune programmation et simplement via des modifications du fichier de configuration.
Vous modifiez simplement votre app.config
et préciser NCache en tant que fournisseur de cache de deuxième niveau et ajoutez une propriété pour celui-ci. Vous activez également la mise en cache de deuxième niveau et d'autres sous-caches de NHibernate dans app.config. Voici un exemple de app.config
changements:
<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 permet à chaque région NHibernate d'être configurée différemment avec ses propres propriétés pour la mise en cache des objets. Dans ce but NCache a un fichier de configuration nommé NCacheNHibernate.xml
, qui contient toutes les configurations de région utilisées par le cache de deuxième niveau NHibernate. Voici un exemple de ce fichier de configuration :
<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 est un puissant cache distribué pour .NET et fournit de nombreuses fonctionnalités riches. L'une de ces fonctionnalités est la synchronisation de la base de données où le cache garde une trace des modifications de la base de données et invalide un élément mis en cache ou le recharge si ses données correspondantes changent dans la base de données.
Vous pouvez configurer le fournisseur NHibernate Second Level Cache pour NCache pour utiliser la synchronisation de la base de données. Juste modifier NCacheNHibernate.xml
fichier de configuration comme suit :
<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>
NHibernate fournit une fonctionnalité de mise en cache des requêtes où il met en cache les résultats des requêtes dans le cache de deuxième niveau. Vous pouvez activer le cache de requêtes NHibernate dans app.config
fichiers de configuration comme suit :
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
...
<session-factory>
...
<property name="cache.use_query_cache">
true
</property>
...
</session-factory>
</hibernate-configuration>
La requête ainsi que les clés primaires des jeux de résultats sont stockées dans une région de requête par défaut nommée NHibernate.Cache.StandardQueryCache
. Mais les objets récupérés à la suite d’une requête sont mis en cache dans leurs régions respectives. De plus, l'activation du cache de requêtes ne met pas en cache chaque requête par défaut. Au lieu de cela, vous devez définir chaque requête comme pouvant être mise en cache dans le code comme suit :
IQuery qry = session.CreateQuery("from Customer c").SetCacheable(true);
Si votre application NHibernate s'exécute dans un environnement multi-serveur, vous avez besoin d'un cache distribué comme NCache en tant que fournisseur de cache NHibernate de deuxième niveau pour les raisons suivantes :