Springboot implémente la fonction de mise en cache des données au niveau de l'annotation, en fonction de la technologie AOP de Spring. Toutes les configurations de cache ne sont configurées qu'au niveau de l'annotation, comme les transactions déclaratives.
Spring définit les interfaces cachemanager et cache pour unifier différentes technologies de mise en cache. Parmi eux, Cachemanager est une interface abstraite pour diverses technologies de mise en cache fournies par le printemps. L'interface de cache contient diverses opérations de cache.
Cachemanger
Pour différentes technologies de cache, différents cache -mangers doivent être mis en œuvre. Le printemps définit la mise en œuvre du cachemanger suivante.
| Cachemanger | décrire |
|---|---|
| SimplecacheManager | Utilisez la collection simple pour stocker les caches, principalement pour les tests |
| ConcurrentmapcacheManager | Utilisez ConcurrentMap comme technologie de cache (par défaut) |
| NOOPCACHEMANGER | Pour les tests |
| EhcachecacheManager | Ehcache est utilisé comme technologie de cache et était souvent utilisé lors de l'hibernat |
| Goyant | Guavacache utilisant Google Guava comme technologie de mise en cache |
| Hazelcastcachemanager | Utiliser Hazelcast comme technique de mise en cache |
| Jcachecachemanager | Implémentation en utilisant JCACHE Standard comme techniques de mise en cache telles que Apache Commons JCS |
| Redevisé | Utilisation de Redis comme technologie de mise en cache |
Le Springboot ordinaire a automatiquement configuré EHCache, Collection, Guava, ConcurrentMap et d'autres caches pour nous, et le ConcurrentMapCacheManager est utilisé par défaut. Fichier de configuration Application.Properties de Springboot, configuré à l'aide des propriétés du préfixe Spring.cache.
Configuration de l'application
Spring.cache.type = # Type technique cache Spring.cache.cache-Names = Le nom de l'application démarre pour créer le cache, printemps.cache.infinispan.config = Infinispan Configuration File Emplacement de fichier de configuration Spring.jcache.Provider = JCACH Classe d'implémentation de JCache lorsque plusieurs classes d'implémentation JCache
Configuration de la classe d'entrée
Ajouter l'annotation @enablecaching
Annotation de cache
| annotation | décrire |
|---|---|
| @Cacheable | Avant d'appeler une méthode, vous devez d'abord rechercher la valeur de retour de la méthode dans le cache. Si cette valeur peut être trouvée, la valeur en cache sera renvoyée. Sinon, cette méthode sera appelée et la valeur de retour sera placée dans le cache. |
| @Cacheput | Mettez la valeur de retour de la méthode dans le cache. Le cache n'est pas vérifié avant que la méthode ne soit appelée et la méthode sera toujours appelée. |
| @Cacheevict | Effacer une ou plusieurs entrées dans le cache. |
| @Caching | Les annotations groupées peuvent être appliquées en même temps plusieurs autres annotations de cache. |
Utiliser manuellement ehcache
Pendant le processus de développement réel, il y a une situation où il n'y a pas d'utilisation d'annotations et vous devez ajouter vous-même du cache. Prenons Ehcache comme exemple et notez brièvement le processus de configuration.
1. Ajouter des dépendances
Introduisez Springboot-Cache et Ehcache. Il convient de noter que ehcache ne nécessite pas de configuration de version et que le pom racine de Springboot a été intégré.
<! - Cache -> <dependency> <proupId> org.springframework.boot </proupId> <Artifactid> printemps-boot-starter-cache </ artifactId> </Dependency> <! - Ehcache -> <Dedency> <proupId> net.sf.ehcache </proupId> <ArtifActid> ehcache </tifactive>
2. Configuration de la classe d'entrée
Ajouter l'annotation @enablecaching
@ SpringbootApplication @ DemoApplication {} 3. Configuration d'Ehcache
Dans le répertoire SRC / Main / Resources, ajoutez le fichier ehcache.xml, consultez le contenu à la fin de l'article.
4. Configuration de l'application.
# Configurer ehcache cache spring.cache.type = ehcache # spécifiez le chemin du fichier de configuration ehcache Spring.cache.ehcache.config = classpath: /ehcache.xml
5. Utilisez le cache
Injecter le bean configuré de Springboot, org.springframework.cache.cacheManager.
Une classe de test simple:
package com.bbf.frame.test; import com.bbf.frame.application; import org.apache.commons.lang3.stringutils; import org.junit.test; import org.junit.runner.runwith; import org.springframework.boot.test org.springframework.cache.cache; import org.springframework.cache.cachemanager; import org.springframework.test.context.junit4.springjunit4classrunner; import org.springframework.test.contex javax.annotation.resource; @runwith (springjunit4classrunner.class) @ webAppConfiguration @ springboottest (classes = application.class, webenvironment = springboottest.webenvironment.mock) Public ClassCache {@Resource Private Cachemanager CacheMeager; @Test public void cacheTest () {// Afficher tous les espaces de cache System.out.println (stringUtils.join (cacheManager.getCachenames (), ",")); Cache cache = cacheManager.getCache ("userCache"); cache.put ("key", "123"); System.out.println ("Cache Success"); String res = cache.get ("key", string.class); System.out.println (RES); }} Annexe ehcache.xml
<? xml version = "1.0" Encoding = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceschemalation = "http://ehcache.org/ehcache.xsd" Toolecheck = " <! - Spécifiez un répertoire de fichiers. Lorsque ehcache écrit des données sur le disque dur, les données seront écrites dans ce répertoire de fichiers -> <diskstore path = "java.io.tmpdir" /> <! - Politique de gestion par défaut -> <defaultCache éternel = "false" maxelementsinMemory = "10000" overflowtodisk = "true" diskpersent = "false" timeLeSConds = "120" TIMETOLIVESECONDS = "120" DiskExpiryTheRaDIntervalSEconds = "120" MemoryStoreevictionPolicy = "LRU" /> <! - Ce cache peut survivre jusqu'à TimeTolivesEcondes secondes. Si la période dépasse TimeToidLesEcondes secondes et que le cache est invalidé -> <cache name = "userCache" eternal = "false" maxElementsInMemory = "100" overflowtodisk = "false" diskpersistent = "false" timetoidlesecds = "120" timetoliveSeds = "180" MemoryStoreevictionPolicy = "/> <!"! MaxElementsInMemory Le nombre maximum d'objets mis en cache en mémoire, regardez la taille de votre tas pour le faire -> <! - Eternal: Vrai signifie que l'objet ne sera jamais expiré. À l'heure actuelle, les propriétés TimeToidleseconds et TimeTolivesEcondes seront ignorées, et la valeur par défaut est fausse -> <! - MaxElementsondisk: le nombre maximum d'objets mis en cache dans le disque dur, si 0 signifie infinité -> <! cache disque dur. Remarque: Si l'objet mis en cache doit être écrit sur le disque dur, l'objet doit implémenter l'interface sérialisable. -> <! - DiskSpoolBuffeSizemb: Taille du cache de disque, la valeur par défaut est de 30 Mo. Chaque cache doit avoir sa propre zone de cache. -> <! - Diskpersistent: Que ce soit pour mettre en cache des données de redémarrage de la machine -> <! - DiskExpiryThreadIntervalSEconds: L'intervalle de temps d'exécution du thread de disque, la valeur par défaut est de 120 secondes -> <! - TimeToidleseconds: définit le temps maximum pour permettre à l'objet d'être inactif, en secondes. Lorsque l'objet a été accessible pour la dernière fois, si la valeur de propriété TimeToidleSonds dépasse la valeur de propriété TimeToidleSonds, l'objet expirera et ehcache le effacera à partir du cache. Cette propriété n'est valable que si la propriété éternelle est fausse. Si la valeur de cette propriété est 0, cela signifie que l'objet peut être inactif indéfiniment -> <! - TIMETOLIVESECONDS: Définit le temps maximum que l'objet permet d'exister dans le cache, en quelques secondes. Lorsque l'objet a été stocké dans le cache, si le temps dans le cache dépasse la valeur de propriété TimeTolivesEnconds, l'objet expirera et ehcache le effacera à partir du cache. Cette propriété n'est valable que si la propriété éternelle est fausse. Si la valeur de la propriété est 0, cela signifie que l'objet peut exister indéfiniment dans le cache. TIMETOLIVESECONDS doit être supérieur à la propriété TimeToidleSonds pour avoir un sens -> <! - MemoryStoreevictionPolicy: Lorsque la limite maxelementsInMemory est atteinte, ehcache nettoiera la mémoire en fonction de la politique spécifiée. Les politiques facultatives sont: LRU (dernier récemment utilisé, politique par défaut), FIFO (First in, First Out) et LFU (nombre minimum de visites). -> </ ehcache>
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.