[CONTEÚDO] A arte do Cache - Spring Boot
O cache
é uma técnica comumente utilizada em aplicações web
, principalmente na parte do backend
. O cache é basicamente o armazenamento efêmero
de dados utilizados com frequência. Isso ajuda a reduzir o tempo que uma aplicação leva para acessar determinados dados, isso melhora a experiência geral
do usuário e torna a aplicação mais escalável
.
Cache Raiz - Spring Boot
Hoje, existem diversas ferramentas de cache, destacando-se o Redis
, o Memcached
e o Varnish
. Essas são excelentes opções que oferecem desempenho notável.
Para uma compreensão mais fácil, optaremos por utilizar o cache em memória integrado ao próprio framework.
-
Adicionando a Dependência
No arquivo
pom.xml
adicione a dependênciacache
:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
-
Habilitando o Cache
No arquivo
main
adicione a seguinte notação:@EnableCaching
exemplo:
package com.danielrodrigues.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @EnableCaching //Adicione a notação public class AppApplication { public static void main(String[] args) { SpringApplication.run(AppApplication.class, args); } }
-
Implementando Cache:
Para usarmos o cache, basta adicionar a seguite notação:
Cacheable("nomeDoCache")
exemplo:
@Cacheable("commits") public int getCommitsCount() { String endpoint = baseUrl + "/search/commits?q=author:"+username; HttpHeaders headers = new HttpHeaders(); headers.setBearerAuth(token); HttpEntity<String> entity = new HttpEntity<>(headers); try { ResponseEntity<GithubResponse> response = restTemplate.exchange( endpoint, HttpMethod.GET, entity, GithubResponse.class); return response.getBody().getTotalCount(); } catch(Exception e) { return 0; } }
Em apenas
3 passos
vocêcacheou
sua aplicação.
Tempo de Armazenamento
Também podemos controlar
o tempo
que determinado cache
ficara salvo na memória.
-
Adicionando a Dependência
No arquivo
pom.xml
adicione mais uma dependência:caffeine
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> </dependency>
-
Criando arquivo de Configuração
Dentro do pacote
config
crie a classe de configuraçãoCacheConfig
.código:
package com.danielrodrigues.app.config; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.cache.caffeine.CaffeineCacheManager; import com.github.benmanes.caffeine.cache.Caffeine; import java.util.concurrent.TimeUnit; @Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { int limitTime = 5; //5 minutos: tempo em que o cache ficara salvo CaffeineCacheManager cacheManager = new CaffeineCacheManager("commits", "otherCache","otherCache2"); //adicione o nome dos caches cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES)); return cacheManager; } }
Observação: Se você busca alta escalabilidade, desaconselho o uso de cache em memória
. Recomendo optar pelo Redis
, pois proporcionará resultados significativamente melhores.
Extras
Mais sobre cache: https://medium.com/@genchilu/cache-strategy-in-backend-d0baaacd2d79