Cache - Tensho97/Aprende-a-Aprender GitHub Wiki

Introducción

Una caché puede definirse como una capa de almacenamiento de datos de acceso rápido y temporal (de alta velocidad que almacena temporalmente información).

El uso de caché en las aplicaciones web permite mejorar considerablemente su rendimiento cuando los datos que manejan (o al menos un subconjunto significativo de estos) no cambian en el tiempo o lo hacen de acuerdo a un patrón predecible.

Aplicando mecanismos de caché se consigue que cierta información se compute una sola vez a lo largo de un determinado período de tiempo, por lo que ante una nueva solicitud de los mismos datos no sera necesario aplicar las operaciones de consulta y/o cálculo y la información sera devuelta de forma casi instantánea.

El establecimiento de una política adecuada de cachés se ve influenciado por una serie de factores, siendo los principales los referentes a la arquitectura de las aplicaciones que harán uso de estas cachés y la infraestructura subyacente proporcionada por el servidor de aplicaciones en el que éstas se alojan, incluyendo la topología de los mismos.

Características

El uso de caché por parte de las aplicaciones tendrá las siguientes características:

  • Debe ser transversal: El uso de caché no estará ligado directamente al negocio de la aplicación, sino que será aplicado a través de estrategias de configuración. De esta manera se integra dentro del negocio de las aplicaciones a través de aspectos (aspects), y podrán ser manejados por Spring Framework. Aplicando esta solución, si en un futuro se decidiese optar por otra implementación de caché, por ejemplo ehcache, la migración sería casi inmediata y afectaría sólo a la configuración.

  • Debe ser distribuido: Al trabajar en un entorno distribuido con múltiples nodos la estrategia predominante para la gestión de caché será la distribución entre ellos (en contraposición de la replicación que consiste en mantener una caché en cada nodo). Con ello se consigue un mejor escalado a medida que aumenta el número de nodo, puesto que un mismo dato sólo es mantenido por un nodo.

  • Debe ser granulado: Se trabajará siempre con el máximo número posible de regiones de caché, de modo que cada una de ellas se le apliquen los mejores criterios máximo número de entradas guardadas, estrategia de borrado, tiempo de vida, etc.

  • Debe ser consistente: Se cachearán sólo aquellos elementos sobre los que se conozca de antemano su comportamiento. En el caso de invocaciones a métodos esta condición se aplica cuando se sepa que dos invocaciones distintas con los mismos parámetros siempre devuelvan el mismo resultado. Es muy importante tener en cuenta que para que esta condición se cumpla, todos los parámetros recibidos por un método cacheable deben sobrescribir los métodos hashcode y equals para que se pueda determinar su unicidad.

  • Debe estar justificado: El empleo de caché implica un cierto uso de recursos, tanto en memoria como en comunicaciones, por lo que sólo se debe hacer uso de mecanismos de caché cuando el coste de procesamiento, recuperación o recurrencia de esos datos suponga un beneficio claro.

Relacionado



Autor: Richard