O Springboot implementa a função de cache de dados no nível de anotação, com base na tecnologia AOP da Spring. Todas as configurações de cache são configuradas apenas no nível de anotação, como transações declarativas.
Spring define interfaces de Cachemanager e cache para unificar diferentes tecnologias de cache. Entre eles, o Cachemanager é uma interface abstrata para várias tecnologias de cache fornecidas pela primavera. A interface do cache contém várias operações de cache.
Cachemanger
Para diferentes tecnologias de cache, diferentes cachemanagers precisam ser implementados. A primavera define a seguinte implementação de Cachemanger.
| Cachemanger | descrever |
|---|---|
| SimpleCachemanager | Use uma coleção simples para armazenar caches, principalmente para testar |
| Concurrentmapcachemanager | Use ConcurrentMap como tecnologia de cache (padrão) |
| Noopcachemanager | Para teste |
| Ehcachecachemanager | O ehcache é usado como uma tecnologia de cache e costumava ser usado quando hibernado |
| Guavacachemanager | Guavacache usando o Google Guava como tecnologia de cache |
| Hazelcastcachemanager | Usando o avelco como uma técnica de cache |
| JCACHECACHEMANAGER | Implementação usando o padrão JCACHE como técnicas de cache, como o Apache Commons JCS |
| Rediscachemanager | Usando Redis como uma tecnologia de cache |
O Springboot regular configurou automaticamente o ehcache, coleção, goiaba, concorrente e outros caches para nós, e o concurrentmapcachemanager é usado por padrão. Arquivo de configuração Application.Properties do Springboot, configurado usando as propriedades do prefixo Spring.cache.
Configuração do aplicativo
spring.cache.type =#Tipo técnico em cache spring.cache.cache-names = o nome do aplicativo começa a criar o cache, spring.cache.ehcache.config = ehcache Configuration Arquivo Localização Spring.cache.infache.finispan.config = Infinispan Arquivo de arquivo local spring.cache.jcache.infache.finispan.config = infinispan local de arquivo spring.cache.jcache.infache.finispan.config = infinispan local de arquivo spring.jcache.jcache.fache.finispan.config = spring.cache.jcache.provider = Especifique a classe de implementação do JCache quando várias classes de implementação do JCache
Configuração da classe de entrada
Adicione anotação @enableCaching
Anotação de cache
| anotação | descrever |
|---|---|
| @Cacheable | Antes de chamar um método, você deve primeiro procurar o valor de retorno do método no cache. Se esse valor puder ser encontrado, o valor em cache será retornado. Caso contrário, esse método será chamado e o valor de retorno será colocado no cache. |
| @Cacheput | Coloque o valor de retorno do método no cache. O cache não é verificado antes que o método seja chamado, e o método sempre será chamado. |
| @Cacheevict | Limpe uma ou mais entradas no cache. |
| @Caching | As anotações agrupadas podem ser aplicadas ao mesmo tempo em várias outras anotações de cache. |
Use manualmente o ehcache
Durante o processo de desenvolvimento real, há uma situação em que não há uso de anotações e você precisa adicionar o cache. Vamos tomar o Ehcache como exemplo e anotar brevemente o processo de configuração.
1. Adicione dependências
Introduzir Springboot-Cache e Ehcache. Deve -se notar que o Ehcache não requer configuração de versão e o POM da raiz do Springboot foi integrado.
<!-- Cache--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <!-- ehcache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
2. Configuração da classe de entrada
Adicione anotação @enableCaching
@SpringboOtapplication@EnableCachingPublic Class DemoApplication {} 3. Configuração do ehcache
No diretório SRC/Main/Recursos, adicione o arquivo ehcache.xml, consulte o conteúdo no final do artigo.
4. Application.Application Configuration
# Configure o cache ehcache spring.cache.type = ehcache# Especifique o caminho do arquivo de configuração do ehcache spring.cache.ehcache.config = classe: /ehcache.xml
5. Use cache
Injete o feijão configurado automaticamente do Springboot, org.springframework.cache.cachemanager.
Uma aula de teste simples:
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.context.SpringBootTest;import org.springframework.cache.cache; importar org.springframework.cache.cachemanager; importar org.springframework.test.context.junit4.springjunit4classrunner; importância org.springframework.test.contet.webf.webf. javax.annotation.resource; @runwith (springjunit4classrunner.class)@webAppConfiguration@springboottest (classes = Application.class, webEnvironment = springboottest.webenvironment.mock) public class; @Test public void CacheSt () {// Mostra todos os espaços de cache system.out.println (stringutils.join (cachemanager.getCachenames (), ",")); Cache cache = cachemanager.getCache ("userCache"); cache.put ("key", "123"); System.out.println ("Sucesso do cache"); String res = cache.get ("key", string.class); System.out.println (res); }} Apêndice ehcache.xml
<? xml versão = "1.0" coding = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-innstance" xsi: nonamesChemalocation = "htttp:/ehche <!- Especifique um diretório de arquivos. Quando o ehcache gravar dados no disco rígido, os dados serão gravados neste diretório de arquivos-> <DiskStore Path = "java.io.tmpdir"/> <!-Política de gerenciamento padrão-> <defaultCache eternal = "false" maxElementsinMemory = "10000" OverflowLeTodisk = "true" "TimerSent" "120" DiskexpirythReadIntervalSonds = "120" MemoryStoreEvictionPolicy = "LRU"/> <!- Este cache pode sobreviver aos segundos de TimetoliveSegunds. Se o período exceder o TimeToidleSeconds segundos e o cache for invalidado-> <cache name = "userCache" eTernal = "false" maxElementsinMemory = "100" OverflowTodisk = "false" DiskPerSistent = "false" timeToidSeconds = "120" timeToliveCondsSonds = "180` `` `'' maxElementsInMemory O número máximo de objetos em cache na memória, observe o tamanho da pilha para fazê-lo-> <!-Eternal: True significa que o objeto nunca expirará. At this time, the timeToIdleSeconds and timeToLiveSeconds properties will be ignored, and the default is false --> <!-- maxElementsOnDisk: The maximum number of cached objects in the hard disk, if 0 means infinity --> <!-- overflowToDisk: true means that when the number of objects cached in the memory reaches the maxElementsInMemory limit, the overflowed objects will be written to the hard disk cache. NOTA: Se o objeto em cache deve ser gravado no disco rígido, o objeto deve implementar a interface serializável. -> <!-DiskspoolBufferSizemb: tamanho do cache do disco, o padrão é de 30 MB. Cada cache deve ter sua própria área de cache. -> <!-DiskPersSistent: se deve cache os dados de reinicialização da máquina virtual-> <!-DiskexpirythReadInterValsOnds: o intervalo de tempo do thread de falha do disco, o padrão é de 120 segundos-> <!-timeToidleSeconds: define o tempo máximo para permitir que o objeto seja lento, nos segundos. Quando o objeto for acessado pela última vez, se o valor da propriedade TimeToidleSeconds exceder o valor da propriedade TimeToidleSeconds, o objeto expirará e o ehcache o limpará do cache. Esta propriedade é válida apenas se a propriedade eterna for falsa. Se o valor dessa propriedade for 0, significa que o objeto pode estar ocioso indefinidamente-> <!-timeToliveSeconds: define o tempo máximo que o objeto permite existir no cache, em segundos. Quando o objeto for armazenado no cache, se o tempo no cache exceder o valor da propriedade TimetoliveSeconds, o objeto expirará e o ehcache o limpará do cache. Esta propriedade é válida apenas se a propriedade eterna for falsa. Se o valor da propriedade for 0, significa que o objeto pode existir no cache indefinidamente. O TimetoliveSeconds deve ser maior que a propriedade TimeToidleSeconds para fazer sentido-> <!-MemoryStoreEvictionPolicy: quando o limite MaxElementsInMemory for atingido, o ehcache limpa a memória de acordo com a política especificada. As políticas opcionais são: LRU (Política Padrão Recentemente usada, FIFO (Primeira In, Primeira Out) e LFU (número mínimo de visitas). -> </ehcache>
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.