Springboot implementa la función de almacenamiento en caché de datos en el nivel de anotación, basada en la tecnología AOP de Spring. Todas las configuraciones de caché solo se configuran en el nivel de anotación, como las transacciones declarativas.
Spring define las interfaces de caché y caché para unificar diferentes tecnologías de almacenamiento en caché. Entre ellos, Cachemanager es una interfaz abstracta para varias tecnologías de almacenamiento en caché proporcionadas por Spring. La interfaz de caché contiene varias operaciones de caché.
Caché
Para diferentes tecnologías de caché, se deben implementar diferentes caché. Spring define la siguiente implementación de Cachemanger.
| Caché | describir |
|---|---|
| SimpleCachemanager | Use una colección simple para almacenar cachés, principalmente para probar |
| Concurrente mapcachemanager | Use concurrentMap como tecnología de caché (predeterminado) |
| Noopcachemanager | Para pruebas |
| EhcacheCachemanager | Ehcache se utiliza como tecnología de caché y se usa a menudo cuando hiberna |
| Guavacachema | Guavacache usando Google Guava como tecnología de almacenamiento en caché |
| Hazelcastcachemanager | Uso de Hazelcast como una técnica de almacenamiento en caché |
| JcacheCachemanager | Implementación utilizando el estándar Jcache como técnicas de almacenamiento en caché como Apache Commons JCS |
| Redisquema | Uso de Redis como tecnología de almacenamiento en caché |
El SpringBoot regular ha configurado automáticamente Ehcache, Collection, Guava, ConcurrentMap y otros cachés para nosotros, y el concurrenteMapCachemanager se usa de forma predeterminada. Archivo de configuración Application.Properties de SpringBoot, configurado utilizando las propiedades del prefijo Spring.Cache.
Configuración de la aplicación
spring.cache.type =#Cached Technical Type Spring.cache.cache-Names = El nombre de la aplicación comienza a crear el caché, spring.cache.ehcache.config = ehcache Configuración del archivo de configuración Clase de implementación de Jcache cuando múltiples clases de implementación de JCACHE
Configuración de la clase de entrada
Agregar anotación @enablecaching
Anotación de caché
| anotación | describir |
|---|---|
| @Cacheable | Antes de llamar a un método, primero debe buscar el valor de retorno del método en el caché. Si se puede encontrar este valor, se devolverá el valor en caché. De lo contrario, se llamará a este método y el valor de retorno se colocará en el caché. |
| @Cacheput | Coloque el valor de retorno del método en el caché. El caché no se verifica antes de llamar al método, y siempre se llamará al método. |
| @CacheEvict | Borre una o más entradas en el caché. |
| @Caching | Las anotaciones agrupadas se pueden aplicar al mismo tiempo otras anotaciones de caché. |
Usar manualmente ehcache
Durante el proceso de desarrollo real, hay una situación en la que no se utiliza anotaciones y debe agregar caché usted mismo. Tomemos a Ehcache como un ejemplo y escribamos brevemente el proceso de configuración.
1. Agregar dependencias
Introduzca el cache springboot y ehcache. Cabe señalar que Ehcache no requiere la configuración de la versión, y el POM raíz de Springboot se ha integrado.
<
2. Configuración de la clase de entrada
Agregar anotación @enablecaching
@Springbootapplication@EnlecachingPublic DemoApplication {} 3. Configuración de Ehcache
En el directorio SRC/Main/Resources, agregue el archivo ehcache.xml, consulte el contenido al final del artículo.
4. Aplicación. Configuración de aplicación
# Configurar ehcache cache spring.cache.type = ehcache# Especifique la ruta del archivo de configuración de ehcache spring.cache.ehcache.config = classpath: /ehcache.xml
5. Use caché
Inyecte SpringBoot's Configurado automáticamente Bean, org.springframework.cache.cachemanager.
Una clase de prueba simple:
paquete 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 og.springfframework.boot.test.context.springboott; import org.springframework.cache.cache; import org.springframework.cache.cachemanager; import org.springframework.test.context.junit4.springjunit4classrunner; import org.springframework.test.context.web.webappconfiguration; import; import; javax.annotation.resource; @runwith (springjunit4classrunner.class)@webappconfiguration@springboottest (classes = Application.class, webEnvironment = springboottest.webenvironment.mock) clase pública testCache {@resource private cachemanager cachemanager; @Test public void Cachetest () {// Muestra todos los espacios de caché System.out.println (StringUtils.Join (Cachemanager.getCachenames (), ",")); Cache Cache = Cachemanager.getCache ("UserCache"); cache.put ("clave", "123"); System.out.println ("Cache Success"); String res = cache.get ("key", string.class); System.out.println (res); }} Apéndice ehcache.xml
<? xml versión = "1.0" encoding = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceschemalocatation = "http://ehcache.org/ehcache.xsd" <!- Especifique un directorio de archivos. When EHCache writes data to the hard disk, the data will be written to this file directory --> <diskStore path = "java.io.tmpdir"/> <!-- Default Management Policy --> <defaultCache eternal = "false" maxElementsInMemory = "10000" overflowToDisk = "true" diskPersistent = "false" timeToIdleSeconds = "120" TIMETOLIVECONDS = "120" DiskExpiryThreadIntervalSeconds = "120" MemoryStoreEvictionPolicy = "LRU"/> <!- Este caché puede sobrevivir hasta TimetoliveSeconds segundos. Si el período excede el timetoidleseConds segundos y el caché se invalida-> <cache name = "userCache" eternal = "false" maxelementsInmemory = "100" overflowTodisk = "false" diskpersistent = "false" timetoidleseConds = "120" TimetoliveSeconds = "180" MemoryStoreVictionPolicy MaxelementsInMemory El número máximo de objetos almacenados en caché en la memoria, mire el tamaño de su montón para hacerlo-> <!-Eternal: Verdadero significa que el objeto nunca caducará. En este momento, se ignorarán las propiedades de timetoidlesegunds y TimetoliveSeconds, y el valor predeterminado es falso-> <!-MaxElementSondisk: el número máximo de objetos almacenados en caché en el disco duro, si 0 significa infinito-<!-OverflowTodisk: verdadero significa que el número de objetos enfermo en la memoria alcanza la memoria de la memoria. caché de disco. Nota: Si el objeto en caché se va a escribir en el disco duro, el objeto debe implementar la interfaz serializable. -> <!-DiskspoolBufferSizember: Tamaño del caché de disco, el valor predeterminado es de 30 MB. Cada caché debe tener su propio área de caché. -> <!-diskpersistent: si para cachear la máquina virtual reiniciar los datos-> <!-DiskExpiryThreadIntervalSeconds: el intervalo de tiempo de ejecución del subproceso de falla del disco, el valor predeterminado es 120 segundos-> <!-Timetoidlesegundos: establece el tiempo máximo para permitir que el objeto esté inactivo, en segundos. Cuando se accede al objeto por última vez, si el valor de la propiedad TimetoidleseConds excede el valor de la propiedad TimetoidleseConds, el objeto caducará y Ehcache lo borrará del caché. Esta propiedad solo es válida si la propiedad eterna es falsa. Si el valor de esta propiedad es 0, significa que el objeto puede estar inactivo indefinidamente-> <!-TimetoliveSeconds: establece el tiempo máximo que el objeto permite existir en el caché, en segundos. Cuando el objeto se ha almacenado en el caché, si el tiempo en la memoria caché excede el valor de la propiedad TimetoliveSeconds, el objeto caducará y Ehcache lo borrará del caché. Esta propiedad solo es válida si la propiedad eterna es falsa. Si el valor de la propiedad es 0, significa que el objeto puede existir en el caché indefinidamente. TimetoliveSeconds debe ser mayor que la propiedad Timetoidlesegunds para tener sentido-> <!-MemorySteeVictionPolicy: Cuando se alcanza el límite MaxElementSInMemory, Ehcache limpiará la memoria de acuerdo con la política específica. Las políticas opcionales son: LRU (la última política de usado recientemente usado), FIFO (primero en, primero fuera) y LFU (número mínimo de visitas). -> </ehcache>
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.