Soporte caché Spring 3.1

Desde la versión 3.1 Spring provee soporte para añadir caché de forma transparente a una aplicación Spring a través de anotaciones.

@Cacheable

La anotación @Cacheable aplica a métodos de Beans de Spring

Permitiendo que cuando la ejecución de este método se hace con los mismos parámetros Spring use el valor de la caché y se lo devuelva en lugar de invocar el método de nuevo.

– También es posible usar varios nombres de cachés (si tuviéramos diferentes cachés configuradas en nuestra aplicación):

– También soporta cacheado condicional con el parámetro condition:

@CacheEvict

La anotación @CacheEvict aplica a métodos y permite eliminar datos de la caché permitiendo elegir si eliminar toda la caché (allEntries) o seleccionar una condición para eliminar un conjunto de entradas.

Cache eviction is removing of any unused or stale data from the cache. Opposed to @Cacheable, annotation @CacheEvict demarcates methods that perform cache eviction, that is methods that act as triggers for removing data from the cache. Just like its sibling, @CacheEvict requires one to specify one (or multiple) caches that are affected by the action, allows a key or a condition to be specified but in addition, features an extra parameter allEntries which indicates whether a cache-wide eviction needs to be performed rather then just an entry one (based on the key):

Configuración

Para configurar la caché basta con añadir <cache:annotation-driven /> en nuestro XML de configuración:

Actualmente Spring soporta dos mecanismos de caché:

· Caché basada en JDK ConcurrentMap

· Caché basada en Ehcache

Pero permite crear mecanismos propios impelementando un CacheManager y un Cache.

Clave de cacheo

La caché en esencia es un almacenamiento clave-valor de ciertos datos que se recuperan en base a una clave.

En el soporte de Spring para saber si tengo algo cacheado se usa el Hashcode de los argumentos, eso funciona bien con objetos con claves naturales pero puede no ser válido en otros entornos como distribuidos (por ejemplo en entornos distribuidos el hashCode de diferentes objetos puede coincidir).

Para estos casos Spring permite implementar una generación de claves a medida o bien elegir que atributo elegir como clave:

Vemos que para la key se puede usar SpEL (Spring Expression Language)

Para saber más dentro del Reference Guide hay un capítulo dedicado a la abstracción de la caché.

Deja un comentario