Spring Boot es un proyecto construido sobre Spring Framework que proporciona una manera más fácil y rápida de instalar, configurar y ejecutar aplicaciones simples y basadas en la web. Es uno de los marcos populares entre los desarrolladores en estos días debido a su rápido entorno listo para producción que permite a los desarrolladores centrarse directamente en la lógica en lugar de luchar con la configuración y la instalación. Es un marco basado en microservicios que se utiliza para crear una aplicación independiente basada en Spring que podemos ejecutar con configuraciones mínimas de Spring.
Características sobresalientes
- No hay ningún requisito para una configuración XML pesada.
- Desarrollar y probar la aplicación Spring Boot es fácil, ya que ofrece una herramienta basada en CLI y también tiene servidores HTTP integrados como Tomcat, Jetty, etc.
- Dado que utiliza la convención sobre la configuración, aumenta la productividad y reduce el tiempo de desarrollo.
Un caché es cualquier ubicación de almacenamiento temporal que se encuentra entre la aplicación y la base de datos de persistencia o una aplicación de terceros que almacena los datos a los que se accede con más frecuencia o más recientemente para que las futuras requests de esos datos se puedan atender más rápido. Aumenta el rendimiento de la recuperación de datos al reducir la necesidad de acceder a la capa de almacenamiento subyacente más lenta. El acceso a los datos desde la memoria siempre es más rápido en comparación con la obtención de datos desde la base de datos. El almacenamiento en caché mantiene los objetos, las imágenes y los datos a los que se accede con frecuencia más cerca de donde los necesita, lo que acelera el acceso al no acceder a la base de datos ni a ninguna aplicación de terceros varias veces para obtener los mismos datos y ahorrar costos monetarios. Los datos que no cambian con frecuencia se pueden almacenar en caché.
Tipos de almacenamiento en caché
Existen principalmente 4 tipos de Caching:
- Almacenamiento en caché de CDN
- Almacenamiento en caché de la base de datos
- Almacenamiento en caché en memoria
- Almacenamiento en caché del servidor web
1. Almacenamiento en caché de CDN
Una red de entrega de contenido (CDN) es un grupo de servidores distribuidos que aceleran la entrega de contenido web acercándolo a donde están los usuarios. Los centros de datos de todo el mundo utilizan el almacenamiento en caché para entregar contenido de Internet a un dispositivo o navegador habilitado para la web más rápidamente a través de un servidor cercano, lo que reduce la carga en el origen de una aplicación y mejora la experiencia del usuario. Los CDN almacenan en caché contenido como páginas web, imágenes y videos en servidores proxy cerca de su ubicación física.
2. Almacenamiento en caché de la base de datos
El almacenamiento en caché de la base de datos mejora la escalabilidad mediante la distribución de la carga de trabajo de consultas desde el backend a múltiples sistemas front-end. Permite flexibilidad en el procesamiento de datos. Puede reducir significativamente la latencia y aumentar el rendimiento para cargas de trabajo de aplicaciones de lectura intensiva al evitar consultar demasiado una base de datos.
3. Almacenamiento en caché en memoria
El almacenamiento en caché en memoria aumenta el rendimiento de la aplicación. Un caché en memoria es un almacén de consultas común, por lo tanto, alivia las bases de datos de las cargas de trabajo de lectura. La memoria caché de Redis es uno de los ejemplos de una memoria caché en memoria. Redis es una herramienta de almacenamiento en caché avanzada y distribuida que permite realizar copias de seguridad y restaurar instalaciones. Caché en memoria proporciona funcionalidad de consulta además del almacenamiento en caché.
4. Almacenamiento en caché del servidor web
El almacenamiento en caché del servidor web almacena datos, como una copia de una página web servida por un servidor web. Se almacena en caché o se almacena la primera vez que un usuario visita la página y cuando la próxima vez que un usuario solicita la misma página, el contenido se entregará desde el caché, lo que ayuda a evitar que el servidor de origen se sobrecargue. Mejora significativamente la velocidad de entrega de la página y reduce el trabajo que debe realizar el servidor backend.
Anotaciones de caché de Spring Boot
1. @Cacheable
La forma más sencilla de habilitar el comportamiento de almacenamiento en caché para un método es marcarlo con @Cacheable y parametrizarlo con el nombre del caché donde se almacenarían los resultados.
@Cacheable(“nombre”)
public String getName(Cliente cliente) {…}
La llamada a getName() primero verificará el nombre del caché antes de invocar el método y luego almacenar en caché el resultado. También podemos aplicar una condición en la anotación usando el atributo condition:
@Cacheable(valor=”Cliente”, condición=”#nombre.longitud<10″)
public Customer findCustomer(String name) {…}
2. @Cache Expulsar
Dado que el caché es de tamaño pequeño. No queremos llenar el caché con valores que no necesitamos a menudo. Los cachés pueden crecer bastante, bastante rápido. Podemos usar la anotación @CacheEvict para eliminar valores para que los valores nuevos se puedan cargar en el caché nuevamente:
@CacheEvict(valor=”nombre”, todas las entradas=verdadero)
public String getName(Cliente cliente) {…}
Proporciona un parámetro llamado allEntries que expulsa todas las entradas en lugar de una entrada basada en la clave.
3. @CachePut
La anotación @CachePut puede actualizar el contenido del caché sin interferir con la ejecución del método.
@CachePut(valor=”nombre”)
public String getName(Cliente cliente) {…}
@CachePut actualiza de forma selectiva las entradas cada vez que las modificamos para evitar la eliminación de demasiados datos de la memoria caché. Una de las diferencias clave entre la anotación @Cacheable y @CachePut es que @Cacheable omite la ejecución del método mientras que @CachePut ejecuta el método y coloca el resultado en la memoria caché.
4. @Almacenamiento en caché
@Caching se usa en el caso de que queramos usar múltiples anotaciones del mismo tipo en el mismo método.
@CacheEvict(“nombre”)
@CacheEvict(valor=”directorio”, clave=”#cliente.id”)
public String getName(Cliente cliente) {…}
El código escrito anteriormente no se compilaría ya que Spring-Boot no permite que se declaren múltiples anotaciones del mismo tipo para un método determinado.
@Caching(expulsar = {
@CacheEvict(“nombre”),
@CacheEvict(valor=”directorio”, clave=”#cliente.id”) })
public String getName(Cliente cliente) {…}
Como se muestra en el código anterior, podemos usar varias anotaciones de almacenamiento en caché con @Caching y evitar errores de compilación.
5. @CacheConfig
Con la anotación @CacheConfig, podemos simplificar algunas de las configuraciones de caché en un solo lugar a nivel de clase, para que no tengamos que declarar las cosas varias veces.
@CacheConfig(cacheNames={“nombre”})
clase pública CustomerData {
@Cacheable
public String getName(Cliente cliente) {…}
Almacenamiento en caché condicional
A veces, un método puede no ser adecuado para el almacenamiento en caché todo el tiempo. Las anotaciones de caché admiten dicha funcionalidad a través del parámetro condicional que toma una expresión SpEL que se evalúa como verdadera o falsa. Si es verdadero, el método se almacena en caché; de lo contrario, se comporta como si el método no estuviera en caché, lo que se ejecuta cada vez sin importar qué valores hay en el caché o qué argumentos se usan.
@Cacheable(valor=”nombre”, condición=”#cliente.nombre == ‘Megan’ “)
public String getName(Cliente cliente) {…}
El método anterior se almacenará en caché, solo si el nombre del argumento es igual a Megan.
A menos que el parámetro
También podemos controlar el almacenamiento en caché en función de la salida del método en lugar de la entrada a través del parámetro a menos que:
@Cacheable(valor=”nombre”, a menos que=”#resultado.longitud() < 20″)
public String getName(Cliente cliente) {….}
La anotación anterior almacenaría en caché las direcciones a menos que tuvieran menos de 20 caracteres. Es importante conocer la condición y los parámetros a menos que se puedan usar junto con todas las anotaciones de almacenamiento en caché.
Dependencia de caché
Si queremos habilitar un mecanismo de caché en una aplicación Spring Boot , debemos agregar la dependencia de caché en el archivo pom.xml . Habilita el almacenamiento en caché y configura un CacheManager .
<dependencia>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependencia>