Nesta postagem do blog, descobriremos como armazenar dados em cache facilmente usando Spring Cache e Couchbase como gerente de loja de apoio.

Índice

Uma palavra de apresentação

Houve muito trabalho relacionado a Primavera ultimamente! Temos estado ocupados trabalhando no Dados do Spring Couchbase para atualizá-lo para a geração 2.x do Java SDK, trazendo consigo uma série de novos recursos e aprimoramentos (mas falaremos mais sobre isso em uma postagem posterior no blog)...

Ao longo do caminho, percebemos que há algumas classes no projeto que não estão realmente relacionadas diretamente a Dados do Spring e, como tal, não precisou aderir ao seu ciclo formal de lançamento "Release Train": o cache pacote.

Portanto, iniciamos um novo projeto de exemplo simples do Spring Boot Cache para hospedar o 2.x geração do Couchbase Spring Cache implementação no github (couchbaselabs/couchbase-spring-cache).

Vamos dar uma olhada em como ele pode ser aproveitado para introduzir facilmente o cache com base no Couchbase em um projeto Spring!

O Cache Abstração

O Spring Framework vem com uma abstração leve de um Cache que os desenvolvedores podem usar automaticamente ao anotar métodos em suas classes (por exemplo, em um @Repositório estereótipo).

Para usar os mecanismos de cache de inicialização do Spring, basta anotar seus métodos com um punhado de anotações relacionadas ao cache:

  • @Cacheable permitirá que a primeira invocação do método anotado com um determinado conjunto de parâmetros de entrada seja executada, mas o resultado será armazenado em cache e as invocações subsequentes (com o mesmo conjunto) serão atendidas de forma transparente a partir do cache.
  • @CachePut sempre invocará o método e armazenará em cache seu resultado (ao contrário de @Cacheable não otimiza o fluxo de invocação).
  • @CacheEvict calculará uma chave de cache a partir dos parâmetros do método anotado e a removerá do cache quando o método for executado (por exemplo, porque a invocação desse método torna uma entrada obsoleta).
  • @Caching permite reagrupar o comportamento da anotação anterior em uma única anotação.
  • @CacheConfig permite que tenhamos parâmetros de cache comuns definidos em uma classe inteira.

A implementação do Couchbase

O mecanismo abstrato é implementado pela estrutura, mas é necessário escolher uma implementação de apoio real. O Spring vem com alguns deles (na memória Mapa, EhCache, Gemfire...), mas é absolutamente possível definir personalizados, simplesmente implementando um Cache e um Gerenciador de cache e torná-lo visível no contexto do Spring.

Esse é o foco de couchbase-spring-cache.

Cada cache tem um nome, e cada valor no cache tem uma chave de cache. A implementação do Couchbase traduzirá isso em uma chave de documento que reflete esse...

  • este é um Cache documento relacionado (por padrão, usando o prefixo "cache:“)
  • está relacionado a um determinado Cache (adicionando o NOME DO CACHE para o prefixo acima)
  • ele armazena um determinado valor de cache em CACHE_KEY (portanto, no final das contas "cache:CACHE_NAME:CACHE_KEY“).

Por enquanto, os valores devem ser Serializável e são armazenados como um Documento serializável do 2.x Java SDK, mas a transcodificação alternativa poderá ser oferecida no futuro, por exemplo. JSON/JsonDocument

Obtendo couchbase-spring-cache e colocando-o em prática

Observação:

No momento em que este texto foi escrito, o projeto estava em 1.0-SNAPSHOT portanto, não está disponível na versão Central Maven ainda. Você terá que compilar manualmente o jar e adicioná-lo ao seu repositório Maven local.

Download e criação do couchbase-spring-cache projeto

Comece clonando o projeto do github:

Em seguida, crie e instale-o localmente usando o Maven:

Você deverá ver uma mensagem de sucesso indicando a versão criada e onde ela foi instalada:

Iniciando um projeto de tutorial

Criaremos um projeto de exemplo do Spring Cache usando o Maven e o Inicialização do Spring como base.
Comece criando a seguinte estrutura de diretórios para o projeto em um diretório raiz de sua escolha (usaremos cbcache aqui):

Por exemplo, use o seguinte comando:

Em seguida, inicie o POM na raiz do cbcache em pom.xml com o seguinte conteúdo:

Adicionar entidade e repositório de gerenciamento de livros

Usaremos o exemplo de um Livro (conforme encontrado no repositório "COMEÇANDO - Armazenamento de dados em cache com o Spring" guia oficial do Spring.io).

Criar o Livro classe de entidade em src/main/java/com/couchbase/demo/Book.java:

Observe o Livro classe é SerializávelPor enquanto, isso é importante para o armazenamento do Couchbase.

Crie uma interface de repositório simples e uma implementação ingênua que simule um atraso:

em src/main/java/com/couchbase/demo/BookRepository.java:

em src/main/java/com/couchbase/demo/SimpleBookRepository.java:

O principal Inicialização do Spring Aplicativo

Por fim, crie um aplicativo que use o repositório em src/main/java/com/couchbase/demo/Application.java:

Se você executar o Aplicativo's principal em seu IDE (ou se você invocar o método "mvn spring-boot:run" na linha de comando), você perceberá que todas as chamadas são de fato muito lentas:

Adição de recursos de cache do Spring Boot

Para ativar o armazenamento em cache, você deve seguir algumas etapas: primeiro, você deve oferecer ao Spring um Gerenciador de cache @Bean

Como estaremos usando o CouchbaseCacheManager (é claro), precisaremos nos conectar a um Aglomerado e usar um Balde (a unidade de armazenamento onde o couchbase armazenará os documentos do cache).
Portanto, o CouchbaseCacheManager precisa de um mapeamento entre Cache e os correspondentes nomes Balde para usar, passado como um Mapa.

Em src/main/java/com/couchbase/demo/Application.javaadicione as seguintes declarações de bean:

Em seguida, você deseja ativar a varredura de anotações relacionadas ao cache e o proxy associado, colocando a opção @EnableCaching na anotação Aplicativo classe.

Ativar o cache em SimpleBookRepository

Vamos ver como ativar o cache real em nosso SimpleBookRepository e verifique como o aplicativo se comporta depois disso.

Para fazer getByIsbn automaticamente no cache na primeira chamada e servir as chamadas subsequentes com dados do cache, basta anotá-lo dessa forma:

Vamos executar o aplicativo novamente e ver como ele se comporta agora:

Uau! Isso é muito melhor para invocações após a primeira, parece que está de fato em cache :-)

Como ver os dados no Couchbase

Vamos dar uma olhada rápida no console da Web para verificar se esses ótimos tempos podem ser atribuídos ao Couchbase:

  • abra uma nova guia em seu navegador e navegue até http://localhost:8091.
  • Conecte-se ao console da Web.
  • ir para o Compartimentos de dados e clique na guia Documentos para o balde que você escolheu usar ("padrão").

O que você vê nessa tela (link rápido para os preguiçosos) deve ser semelhante a este:

Spring Cache documents in Couchbase console

Podemos ver que ambos os livros foram armazenados em cache no couchbase, usando o cache:CACHE_NAME:CACHE_KEY para os IDs de documentos.

Conclusão

O armazenamento em cache fácil usando o Couchbase agora está ao seu alcance!

Há muito mais que Spring Cache pode fazer por você (por exemplo, escolher como criar a chave de cache, cache condicional, despejo de cache, etc.), e há especificidades para couchbase-spring-cache (por exemplo, para a limpeza do cache, você pode escolher entre usar uma exibição que removerá apenas o documento relevante ou, se o seu bucket for dedicado a um único cache, use o descarga mecanismo...).

Espero que este tutorial introdutório tenha despertado seu apetite para usar o cache facilmente usando Spring Cache e Couchbase!

As próximas etapas provavelmente serão a introdução de formatos de armazenamento alternativos (como JSON) e a oferta do artefato no Maven Central ou em um repositório Maven semelhante publicamente acessível (Bintray alguém?)...

Fique atento às notícias relacionadas à primavera em um futuro próximo!

Enquanto isso, boa codificação :)

Autor

Postado por Simon Basle, engenheiro de software, Pivotal

Simon Basl_ é um engenheiro de software baseado em Paris que trabalha na equipe Spring da Pivotal. Anteriormente, ele trabalhou na equipe do Couchbase Java SDK. Seus interesses abrangem aspectos de design de software (OOP, padrões de design, arquitetura de software), clientes avançados, o que está além do código (integração contínua, (D)VCS, práticas recomendadas) e programação reativa. Ele também é editor da versão francesa do InfoQ.com.

Deixar uma resposta