Ya en un post anterior hablamos de como realizar la configuración básica con Spring Boot para cachear consultas de BBDD.
Con este ejemplo cuando hacemos una consulta de BBDD ya tenemos almacenado su valor en memoria y accederemos al mismo de forma rápida en futuras consultas. ¿Pero que pasa si por alguna razón los valores cacheados son cambiados en BBDD?
Ya indicamos que cada consulta de BBDD será identificada con un nombre, el cual indicamos en la propia anotación 'Cacheable', cuya representación será un mapa de valores en memoria. Ese mapa de valores estará formado por parejas clave/valor, donde la clave es el parámetro de entrada y el valor el resultado de la consulta original.
Si lo hacemos a través de nuestras clases DAO no tendremos problema. Y para ello haremos uso de la anotación @CachePut. Esta anotación nos permitirá actualizar un mapa de valores concreto y dentro de ese mapa que clave/valor. Esto lo haremos con las propiedades 'cacheNames' y 'key' respectivamente. Un ejemplo:
Otra opción posible es borrar directamente ese mapa de valores. Bien porque se quiera liberar memoria, sean datos que ya no se usan o alguna otra causa.
Con este ejemplo cuando hacemos una consulta de BBDD ya tenemos almacenado su valor en memoria y accederemos al mismo de forma rápida en futuras consultas. ¿Pero que pasa si por alguna razón los valores cacheados son cambiados en BBDD?
Ya indicamos que cada consulta de BBDD será identificada con un nombre, el cual indicamos en la propia anotación 'Cacheable', cuya representación será un mapa de valores en memoria. Ese mapa de valores estará formado por parejas clave/valor, donde la clave es el parámetro de entrada y el valor el resultado de la consulta original.
Si lo hacemos a través de nuestras clases DAO no tendremos problema. Y para ello haremos uso de la anotación @CachePut. Esta anotación nos permitirá actualizar un mapa de valores concreto y dentro de ese mapa que clave/valor. Esto lo haremos con las propiedades 'cacheNames' y 'key' respectivamente. Un ejemplo:
@Cacheable( value = { "CountryDao.findByCode" } ) Country findByCode( @Param( "code" ) String code ); @CachePut( cacheNames = "CountryDao.findByCode", key = "#p0.code" ) Country update( S entity );
Otra opción posible es borrar directamente ese mapa de valores. Bien porque se quiera liberar memoria, sean datos que ya no se usan o alguna otra causa.
@CacheEvict( cacheNames = { "CountryDao.findByCode" }, key = "#p0.code" ) Country save( S entity );
Esta anotación además permite el borrado de todas las parejas clave/valor de un determinado mapa. Para ello debemos usar la propiedad 'allentries'.
@CacheEvict(cacheNames="CountryDao.loadCountries", allEntries=true) public void loadCountries()
No hay comentarios:
Publicar un comentario