Maison  >  Article  >  Java  >  Explication détaillée des exemples de code MyBatis sur les problèmes de cache de deuxième niveau

Explication détaillée des exemples de code MyBatis sur les problèmes de cache de deuxième niveau

黄舟
黄舟original
2017-03-24 10:34:361767parcourir

Cet article présente principalement le problème de MyBatis avec le cache de deuxième niveau. Le cache de deuxième niveau est un cache de niveau MapperSession qui exploite le même Mapper, et son. cache de deuxième niveau Il peut être partagé.

MyBatis fournit un cache de premier niveau et un cache de deuxième niveau. Le cache de premier niveau est un cache au niveau de la session sql. Les caches entre les différentes sessions sql ne s'affectent pas. Le cache de deuxième niveau est un cache de niveau Mapper. Plusieurs sqlSession fonctionnent sur le même Mapper, et son cache de deuxième niveau peut être partagé.

MyBatis propose une variété de solutions de cache de deuxième niveau parmi lesquelles choisir. Parmi eux, le support de Memcached est relativement mature. Nous allons maintenant prendre Memcached comme exemple pour présenter l'intégration avec le projet spring.

Utilisez configuration

pour configurer pom.xml et ajouter des dépendances.

<dependencies>
 ...
 <dependency>
  <groupId>org.mybatis.caches</groupId>
  <artifactId>mybatis-memcached</artifactId>
  <version>1.0.0</version>
 </dependency>
 ...
</dependencies>

Commutateur global

<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>

Configurez le mapper.xml qui doit être mis en cache

Le deuxième Le niveau de cache est Mapper Level, vous pouvez activer le cache de deuxième niveau pour un mapper.xml spécifique. Une fois

<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.MemcachedCache" />
</mapper>

activé, toutes les instructions select du mappeur seront mises en cache par défaut. Toutes les instructions d'insertion, de mise à jour et de suppression sous cet espace de noms entraîneront la mise en cache dans l'espace. être mis en cache.

Le cache peut être désactivé pour une instruction spécifique.

 <select id="retObj" resultMap="results" useCache="false" >
   select id, name, sex from employee  
 </select>

peut également déclencher une action d'actualisation pour une certaine instruction (la valeur par défaut correspond à toutes les instructions insert, update et delete).

 <select id="retObj" resultMap="results" flushCache="true" >
   select id, name, sex from employee  
 </select>

Les paramètres de configuration sont définis dans memcached.properties. S'ils sont manquants, les paramètres par défaut sont utilisés.

Voici les paramètres de configuration :

Si vous devez enregistrer les journaux d'opérations de cache, vous pouvez y parvenir par la configuration suivante

<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.LoggingMemcachedCache" />
 ...
</mapper>

Notes

Les classes mises en cache dans Memcached doivent implémenter l'interface Serialisable, sinon l'erreur java.io.NotSerialisedException sera signalée.

Scénarios d'application du cache L2

  1. Il est recommandé d'utiliser le cache L2 pour les données avec une fréquence de requête élevée et une fréquence de modification faible.

  2. Pour de nombreuses demandes de requêtes et que les utilisateurs n'ont pas d'exigences élevées en matière de résultats de requêtes en temps réel, la technologie de mise en cache de deuxième niveau mybatis peut être utilisée pour réduire l'accès à la base de données et améliorer la vitesse d'accès aux scénarios commerciaux. tels que : Analyse statistique chronophage SQL, requête de facture téléphonique SQL, etc.

La méthode de mise en œuvre est la suivante :

En définissant l'intervalle de rafraîchissement, mybatis efface automatiquement le cache à intervalles réguliers, selon modifications des données Fréquence de réglage de l'intervalle d'actualisation du cache flushInterval, par exemple, défini sur 30 minutes, 60 minutes, 24 heures, etc., en fonction des besoins.

Limites de Mybatis

Le cache de deuxième niveau de Mybatis n'implémente pas correctement la mise en cache fine du niveau de données.

Par exemple, les besoins suivants : mettre en cache les informations sur le produit. Étant donné que l'accès aux requêtes d'informations sur le produit est important, les utilisateurs doivent interroger les dernières informations sur le produit à chaque fois, à ce moment-là, si vous utilisez la seconde. Cache de niveau 2 de mybatis Il est impossible de parvenir à ce que lorsqu'un produit change, seules les informations de cache du produit soient actualisées sans actualiser les informations des autres produits, car la zone de cache de deuxième niveau de ​​mybaits est divisé en mappeurs. Lorsque les informations d'un produit changent, tous les produits seront actualisés. Effacez tous les messages données du cache . La résolution de ces problèmes nécessite une mise en cache ciblée des données en fonction des besoins au niveau de la couche métier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn