Copia de seguridad de Spring Cache con Couchbase

En esta entrada del blog, descubriremos cómo almacenar datos en caché fácilmente utilizando Caché de primavera y Couchbase como gerente de una tienda de respaldo.

Índice

Introducción

Hubo mucho trabajo relacionado con Primavera ¡últimamente! Hemos estado ocupados trabajando en el Spring Data Couchbase conector para actualizarlo a la generación 2.x del SDK de Java, lo que conlleva una serie de nuevas funciones y mejoras (pero hablaremos de ello más adelante)...

En el camino, nos dimos cuenta de que hay algunas clases en el proyecto que no están realmente relacionadas directamente con Datos de primavera y, como tal, no ha tenido que ceñirse a su ciclo formal de lanzamientos "Release Train": el caché paquete.

Así que empezamos un nuevo y sencillo proyecto de ejemplo de Spring Boot Cache para alojar el 2.x generación del Caché Couchbase Spring aplicación en github (couchbaselabs/couchbase-spring-cache).

Veamos cómo se puede aprovechar para introducir fácilmente el almacenamiento en caché respaldado por Couchbase en un proyecto Spring.

En Caché Abstracción

Spring Framework viene con una abstracción ligera de un Caché que los desarrolladores pueden utilizar automáticamente anotando métodos en sus clases (por ejemplo, en una clase @Repositorio estereotipo).

Para hacer uso de los mecanismos de caché de arranque de Spring, basta con anotar los métodos con un puñado de anotaciones relacionadas con la caché:

  • @Cacheable dejará que se ejecute la primera invocación del método anotado con un conjunto determinado de parámetros de entrada, pero el resultado se almacenará en caché y las invocaciones posteriores (con el mismo conjunto) se servirán de forma transparente desde la caché.
  • @CachePut siempre invocará el método y almacenará en caché su resultado (a diferencia de @Cacheable no optimiza el flujo de invocación).
  • @CacheEvict calculará una clave de caché a partir de los parámetros del método anotado y la eliminará de la caché cuando se ejecute el método (por ejemplo, porque invocar este método hace que una entrada sea obsoleta).
  • @Caching permite reagrupar comportamientos de la anotación anterior en una sola.
  • @CacheConfig nos permite tener parámetros de caché comunes establecidos en toda una clase.

Implementación de Couchbase

El framework establece el mecanismo abstracto, pero debe elegirse una implementación de respaldo real. Spring viene con algunas de ellas (en memoria Mapa, EhCache, Gemfire...), pero es absolutamente posible definir otras personalizadas, simplemente implantando un Caché y un Gestor de caché y hacerlo visible en el contexto de Spring.

Ese es el objetivo de couchbase-spring-cache.

Cada caché tiene un nombre, y cada valor en la caché tiene una clave de caché. La implementación de Couchbase traducirá eso en una clave de documento que refleje ese...

  • este es un Caché documento relacionado (por defecto utilizando el prefijo "caché:“)
  • se refiere a un determinado Caché (añadiendo el NOMBRE_DE_LA_CACHE al prefijo anterior)
  • almacena un valor de caché concreto en CACHE_KEY (así que en general "cache:CACHE_NAME:CACHE_KEY“).

Por ahora los valores deben ser Serializable y se almacenan como SerializableDocument del 2.x Java SDK, pero en el futuro podrían ofrecerse alternativas de transcodificación, por ejemplo JSON/JsonDocument

En couchbase-spring-cache y ponerlo en práctica

Nota:

En el momento de escribir estas líneas, el proyecto se encuentra en 1.0-SNAPSHOT por lo que no está disponible en Maven Central todavía. Tendrás que compilar manualmente el jar y añadirlo a tu repositorio local de Maven.

Descargar y construir el couchbase-spring-cache proyecto

Comienza clonando el proyecto desde github:

A continuación, compílelo e instálelo localmente utilizando Maven:

Debería ver un mensaje de éxito indicando la versión creada y dónde se instaló:

Iniciar un proyecto tutorial

Construiremos un proyecto de ejemplo de Spring Cache utilizando Maven y Spring Boot como base.
Comience por crear la siguiente estructura de directorios para el proyecto en un directorio raíz de su elección (utilizaremos cbcache aquí):

Por ejemplo, utilice el siguiente comando:

A continuación, inicie el POM en la raíz de cbcache en pom.xml con el siguiente contenido:

Añadir entidad de gestión de libros y repositorio

Utilizaremos el ejemplo de un Reserve (tal y como se encuentra en el repositorio "COMENZAR - Almacenamiento de datos en caché con Spring"guía oficial de Spring.io).

Crear el Reserve clase de entidad en src/main/java/com/couchbase/demo/Libro.java:

Tenga en cuenta la Reserve clase es SerializableEsto es importante por ahora para el almacenamiento de Couchbase.

Crear una interfaz de repositorio simple y una implementación ingenua que simule un retraso:

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

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

Principal Spring Boot Aplicación

Por último, cree una Aplicación que utilice el repositorio en src/main/java/com/couchbase/demo/Application.java:

Si ejecuta la función Aplicación's principal en su IDE (o si invoca "mvn spring-boot:ejecutar" desde la línea de comandos), observará que todas las llamadas son, en efecto, bastante lentas:

Añadir capacidades de almacenamiento en caché de Spring Boot

Para activar el almacenamiento en caché, debe seguir algunos pasos: en primer lugar, debe ofrecer a Spring un archivo Gestor de caché @Bean

Dado que vamos a utilizar el CouchbaseCacheManager (por supuesto), necesitaremos conectarnos a un Grupo y utilizar un Cubo (la unidad de almacenamiento donde couchbase almacenará los documentos de la caché).
Así que el CouchbaseCacheManager necesita una correspondencia entre Caché y los correspondientes Cubo a utilizar, pasado como Mapa.

En src/main/java/com/couchbase/demo/Application.javaañade las siguientes declaraciones de bean:

A continuación, desea activar el escaneo de anotaciones relacionadas con la caché y el proxy asociado colocando la etiqueta @HabilitarCaché en el Aplicación clase.

Activar caché en SimpleBookRepository

Veamos cómo activar el almacenamiento en caché real en nuestro SimpleBookRepository y compruebe cómo se comporta la aplicación después de eso.

Para hacer getByIsbn automáticamente en caché en la primera invocación y servir las invocaciones posteriores con datos de la caché, simplemente anótelo así:

Vamos a ejecutar la aplicación de nuevo y ver cómo se comporta ahora:

¡Vaya! Esto es mucho mejor para las invocaciones más allá de la primera, parece que efectivamente se almacena en caché :-)

Ver los datos en Couchbase

Echemos un vistazo rápido a la consola web para verificar que estos magníficos tiempos pueden atribuirse a Couchbase:

  • abra una nueva pestaña en su navegador y navegue hasta http://localhost:8091.
  • conectarse a la consola web.
  • ir a la Cubos de datos y haga clic en Documentos para el cubo que haya elegido utilizar ("por defecto").

Lo que ve en esta pantalla (enlace rápido para los perezosos) debería ser similar a esto:

Spring Cache documents in Couchbase console

Podemos ver que ambos libros se almacenaron en caché en couchbase, utilizando el método cache:CACHE_NAME:CACHE_KEY para los ID de los documentos.

Conclusión

Couchbase le facilita el almacenamiento en caché.

Hay mucho más que Caché de primavera puede hacer por usted (por ejemplo, elegir cómo crear la clave de caché, caché condicional, desalojo de caché, etc...), y hay especificidades de couchbase-spring-cache (por ejemplo, para la limpieza de la caché puede elegir entre utilizar una vista que sólo eliminará el documento relevante o, si su cubo está dedicado a una única caché, utilizar la función descarga mecanismo...).

Espero que este tutorial introductorio te haya abierto el apetito sobre la facilidad de uso de la memoria caché con Caché de primavera y Couchbase!

Los próximos pasos serán probablemente introducir formatos de almacenamiento alternativos (como JSON) y ofrecer el artefacto en Maven Central o en un repositorio Maven similar de acceso público (Bintray ¿alguien?)...

Esté atento a las próximas noticias relacionadas con la primavera.

Mientras tanto, feliz codificación :)

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Simon Basle, Ingeniero de Software, Pivotal

Simon Basl_ es un Ingeniero de Software residente en París que trabaja en el equipo Spring de Pivotal. Anteriormente, trabajó en el equipo de Couchbase Java SDK. Sus intereses abarcan aspectos de diseño de software (OOP, patrones de diseño, arquitectura de software), clientes ricos, lo que hay más allá del código (integración continua, (D)VCS, mejores prácticas) y programación reactiva. También es editor de la versión francesa de InfoQ.com.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.