Caché MyBatis

4
8682

En este tutorial vamos a aprender a usar MyBatis para configurar y personalizar un potente sistema de caché transaccional de consultas que permita mejorar el rendimiento de nuestras aplicaciones

Caché MyBatis

0. Índice de contenidos.

  1. Introducción.
  2. Caché local.
  3. Caché de segundo nivel.

1. Introducción.

El uso de la memoria caché está ligado, normalmente, a entornos en los que existen problemas de rendimiento. Su cometido es tan simple como conseguir que los datos con un índice de uso mayor se encuentre mapeados en memoria listos para su uso.

En este sentido MyBatis, framework de persistencia de java del que ya se ha hablado en este blog anteriormente, ofrece la posibilidad de configurar y personalizar un potente sistema de caché transaccional de consultas que permita mejorar el rendimiento de nuestras aplicaciones, ofreciendo para ello dos niveles distintos:

  • Una caché local se encuentra activa siempre.
  • Una caché de segundo nivel opcional.

2. Caché local.

La caché local siempre está activa y configurada por defecto para almacenar la información durante el tiempo de sesión.

Esta caché se encuentra almacenada en un miembro de una instancia de , el cuál a su vez pertenece a un objeto SqlSession y consiste en un mapa de la forma "key + value", donde:

  • key = (mybatis-namespace + nombre-consulta) + (consulta en bruto con los placeholders de los parametros) + (lista actual de parametros de la consulta)
  • value = (lista de objetos java resultantes para la consulta)

La única configuración que admite esta caché es: localCacheScope = SESSION or STATEMENT:

  • Cuando toma el valor SESSION:
    • los resultados de todas las consultas quedan almacenadas en la memoria caché
    • la memoria caché se limpia cuando:
    • Finalice una transacción (o al finalizar una consulta configurada con autoCommit=true).
    • Siempre que se realice una consulta insert/update/delete.
  • Cuando toma el valor STATEMENT:
    • los resultados quedarán almacenados solo para las consultas que se realicen.
    • la memoria caché se limpiara al finalizar cada consulta de MyBatis.

El lugar para realizar esta configuración es el fichero de configuración de mybatis y en concreto dentro de los settings:

3. Caché de segundo nivel.

La caché de segundo nivel se configura a nivel de mapper de mybatis, por ello, para configurarlo basta con añadir la siguiente línea en un fichero mapper:

Las consecuencias de activar esta caché son:

  • Automáticamente todas las consultas que existan dentro del fichero mapper se almacenarán en caché.
  • Todas las sentencias inser, update y delete limpiarán la caché.
  • Cuando se necesite más espacio para almacenar información se utilizará un algoritmo de tipo LRU (Least Recently Used) para proceder con el desalojo.
  • No se poducirán desalojos planificados por defecto.
  • Se almacenarán 1024 referencias a listas u objetos.
  • Se tratará la caché como una cache de Lectura/Escritura, en otras palabras, objetos tomados de la caché no serán compartidos y pueden ser modificados con total seguridad.

Los parámetros de configuración que admite esta caché:

  • eviction: Establece la política de desaolojo de información de la caché. Las políticas disponibles son:
    • LRU – Least Recently Used (By default): Elimina objetos que no han sido utilizados durante un período de tiempo..
    • FIFO – First in First Out: Elimina los objetos en el orden en el que entraron.
    • SOFT – Soft Reference: Elimina los objetos basandose en el estado del recolector de basura de java y en reglas «Soft Reference».
    • WEAK – Weak Reference: Elimina los objetos basándose en el estado del recolector de basura de java y en reglas «Weak Reference».
  • flushInterval: Puede establecerse como cualquier entero positivo y representa una cantidad razonable de tiempo especificado en milisegundos. Por defecto no tiene ningún valor.
  • size: Puede establecerse como cualquier entero positivo. Hay que tener siempre en cuenta el tamaño de los objetos que se están almacenando en caché y la memoria disponible. Por defecto está establecido en 1024.
  • readOnly: Puede establecerse como true o false. Una caché de solo-lectura que devolverá siempre la misma instancia del objeto cacheado a todos los solicitantes.

Además, MyBatis permite gestores como Ehcache o Memcached se encarguen de la gestión de esta caché mediante librerías de integración.

4 Comentarios

  1. @Benja Garrido: Gracias!
    @Jose Chavez: No, internamente la caché de MyBatis mantiene un LinkedHashMap para almacenar los valores. El parámetro size establece el la capacidad inicial de dicho LinkedHashMap.

  2. […] Posteriormente, veremos como usar la caché de segundo nivel que ofrece Mybatis con el soporte de Redis, tenéis más detalles del funcionamiento de la caché de MyBatis en Caché MyBatis. […]

Dejar respuesta

Please enter your comment!
Please enter your name here