O Ehcache é uma estrutura de cache em processo de java pura, com recursos rápidos e enxutos, e é o cacheProvider padrão no hibernado.
O Ehcache fornece uma variedade de estratégias de cache, divididas principalmente nos níveis de memória e disco, portanto, não há necessidade de se preocupar com problemas de capacidade.
O Spring-Boot é uma estrutura de integração rápida projetada para simplificar o processo inicial de construção e desenvolvimento de novas aplicações de mola. A estrutura usa uma maneira específica de configurá -la, para que os desenvolvedores não precisem mais definir configurações de caldeira.
Como o Spring-Boot não requer nenhum arquivo de configuração de caldeira, o Spring-Boot será um pouco diferente ao integrar algumas outras estruturas.
1. Spring-boot é uma estrutura para pacotes JAR gerenciados através do MAVEN. As dependências necessárias para a integração do ehcache são as seguintes
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId></dependency><dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.3</version></dependency>
O arquivo pom.xml específico é o seguinte
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lclc.boot</groupId> <artifactId>boot-cache</artifactId> <Version> 0.0.1-SNAPSHOT </Version> <!-herdar os padrões de Spring Boot-> <aporel> <puperid> org.springframework.boot </groupid> <ArtifactId> Spring-Boot-Starter-Parent </Artifactid> <Versão> 1.1.3.Release </Versador> </Superiores </Superições <GrupidId> org.springframework.boot </frugiD> <stifactId> primavera-boot-starter-web </artifactId> </dependency> <pendence> <puperid> org.springframework.boot </frupid> <stiftid> spring-boot-starter-data-jpa <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>17.0</version> </dependency> <dependency> <groupId>org.sspringframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <TeRtifactId> ehcache </storkactid> <versão> 2.8.3 </sipers> </dependency> </dependências> <pendencyManagement> <pendências> </dependências> </dependências> </dependências> </dependências> </dependências> </dependências> </dependências> <burgins> </GroupInId> ou.PRUBRESM> </GroupS> </Groupins> </GroupS> </Groupins> </GroupS> </Groupins> </GroupS> </Groupins> </Groupins> </Groupins> </GroupS> </GroupS> </GroupS> </GroupS> </GroupS> <BroupS> ou. <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repositório> <Ppository> <d> spring-me-milestones </dod> <url> http://repo.spring.io/milestone </url> </positório> </repository> </positório> <lampyRepository> <plupinRepository> <dring> springshapshots <wluginReposy> <lginRepository> <dring> spring-snapshots <wluginReposition> <luginReposition> <dring> springsnapshotes <url> http://repo.spring.io/snapshot </url> </pluginRepository> <cluginRepository> <id> spring-milestones </dod> <url> http://repo.spring.io/milestone </url> </cluginReposky> </url> </buflreposkery> </url> </cluginReposkery> </url> </cluginReposkery> </url> </cluginReposymery>
2. Usando o ehcache, precisamos de um ehcache.xml para definir alguns atributos de cache.
<? xml versão = "1.0" coding = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-innstance" xsi: nonamesChemalocation = "htttp:/ehche <diskStore path="java.io.tmpdir/Tmp_EhCache" /> <defaultCache eternal="false" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" /> <cache name = "Demo" eternal = "false" maxElementsInMemory = "100" OverflowTodisk = "False" DiskPerSistent = "False" TimeToidleSeconds = "0" timeToliveSeconds = "300" MemoryStoreEvictionPolicy = "LRU" /> < /ehcache>
Explique as tags neste arquivo XML.
(1) .DiskStore: é o caminho do cache, o ehcache é dividido em dois níveis: memória e disco. Esta propriedade define o local do cache do disco. Os parâmetros são explicados da seguinte forma:
(2) .DefaultCache: a política de cache padrão. Quando o Ehcache não consegue encontrar o cache definido, essa política de cache será usada. Apenas um pode ser definido.
(3) .cache: política de cache personalizada, uma política de cache personalizada. Os parâmetros são explicados da seguinte forma:
O Springboot suporta muitos métodos de cache: Redis, Goiaba, Ehcahe, Jcache, etc.
Explique a diferença entre Redis e Ehcache:
Redis: É um programa de corrida independente. Após a instalação, é manipulada usando JEDIS em Java. Por ser independente, se você escrever um programa de teste de unidade, coloque alguns dados no Redis e, em seguida, escreva outro programa para obter os dados, poderá obter os dados. , Assim,
Ehcache: É obviamente diferente de Redis, está ligado aos programas Java. Quando o programa Java está vivo, ele está vivo. Por exemplo, se você escrever um programa independente para colocar dados e, em seguida, gravar um programa independente para obter dados, não obterá dados. Os dados só podem ser obtidos em programas independentes.
3. Exponha o gerente EHCACHE ao contêiner de contexto de primavera.
@Configuration // A anotação inicia o cache @enableCachingpublic Class CacheConfiguration {/** Ehcache Principal Manager*/ @Bean (name = "AppehcachEcachemanager") Public Ehcachecanager Ehcachemanager (EhCachemanagerFeanGoryBeanBeaniCeanArtEnBeanBeanArtEnBeanager (ehcachemanager ") (ehcachecheManager ehcachemanager (ehecAmEnTeMaTeNaCeanBeanBeanBeanAnCeanAr. } / * * De acordo com as configurações de compartilhado ou não, a primavera cria uma base de ehcache através de Cachemanager.Create () ou New Cachemanager (), respectivamente. */ @Bean public ehcachemanagerFactoryBean ehcachemanagerFactoryBean () {EhcachemanagerFactoryBean CachemanagerFactoryBean = new EhcachemanagerFactoryBean (); CachemanagerFactoryBean.SetConfigLocation (novo ClassPathResource ("conf/ehcache-app.xml")); CachemanagerFactoryBean.Setshared (True); Retornar CachemanagerFactoryBean; }}@Configuration: ANOTATADO PARA Spring-Boot, anotado principalmente como uma classe de configuração, e a prioridade é dada para digitalização.
@Bean: Adicione o feijão ao recipiente da mola.
Todas as configurações são feitas até agora, e a integração da estrutura através da botem mola é simples.
4. Use Ehcache
O uso do ehcache é principalmente através do mecanismo de cache da mola. Implementamos o mecanismo de cache da mola usando o EHCACHE, para que possamos usar o mecanismo de cache da mola completamente em termos de uso.
Algumas notas estão envolvidas:
@Cacheable: responsável por adicionar o valor de retorno do método ao cache, parâmetro 3
@Cacheevict: responsável pela limpeza do cache, parâmetro 4
Explicação do parâmetro:
Sem mais delongas, basta fazer o upload do código:
@ServicePublic Class CacheDemoserviceImpl implementa Cachedemoservice {/** * Chave do cache */public static final string thing_all_key = "/" thing_all/""; /*** O atributo de valor indica qual política de cache usar. A política de cache está em ehcache.xml */ public static final string Demo_cache_name = "Demo"; @Cacheevict (value = Demo_cache_name, key = thing_all_key) @Override public void Create (coisa da coisa) {long id = getNextId (); coisa.setId (id); data.put (id, coisa); } @Cacheable (value = Demo_cache_name, key = "#thing.getId () + 'coisa'") @Override Public Things FindById (longo id) {System.err.println ("sem cache!" + ID); retornar data.get (id); } @Cacheable (value = Demo_cache_name, key = thing_all_key) @Override public List <Shing> findall () {return lists.newArrayList (data.values ()); } @Override @cacheput (value = Demo_cache_name, key = "#thing.getid ()+'coisa'") @cacheevict (value = Demo_cache_name, key = thing_all_key) public What update (coisa coisa) {System.out.println (coisa); data.put (thing.getId (), coisa); coisa de retornar; } @Cacheevict (value = Demo_cache_name) @Override public void Delete (longo id) {data.remove (id); }}5. Você só precisa anotar o método da camada de serviço por meio de anotações e pode usar o cache, armazenar o cache no Find ** e limpar o cache em excluir ** e atualizar **.
Explicação detalhada das anotações de cache
@CacheConfig: É usado principalmente para configurar algumas configurações de cache comuns que serão usadas nesta classe. Aqui @CacheConfig (Cachenames = "Usuários"): o conteúdo retornado no objeto de acesso a dados está configurado para ser armazenado no objeto de cache chamado Usuários. Também podemos defini -lo diretamente através do próprio nome do cache do @Cacheable sem usar esta anotação.
@Cacheable: o valor de retorno da função findbyname configurado será adicionado ao cache. Ao mesmo tempo, ao consultar, ele receberá o cache primeiro e, se não existir, o acesso ao banco de dados será iniciado. Esta anotação tem os seguintes parâmetros:
Além das duas anotações usadas aqui, há também as seguintes anotações principais:
@Cacheput: configurado em uma função, ele pode ser armazenado em cache de acordo com os parâmetros e define condições. Ao contrário do @cacheable, ele realmente chama a função sempre, por isso é usada principalmente para operações de adição de dados e modificação. Seus parâmetros são semelhantes a @cacheable. Para funções específicas, consulte a análise acima dos parâmetros @cacheable.
@Cacheevict: configurado em funções, geralmente usado em métodos de exclusão, para remover dados correspondentes do cache. Além dos mesmos parâmetros que @cacheable, ele possui os dois parâmetros a seguir:
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.