EHCache

RECU-0222 (Recurso Referencia)

Descripción

EhCache es una de las librerías más populares en el manejo de la caché de objetos en Java. Su principio básico es dividir la caché en diversas "regiones" donde se ubican los objetos. Estas regiones son configurables. A través del XML de configuración, se pueden definir sus características principales.

Para preservar un objeto dentro de la cache, tiene que tener una característica fundamental, ser usado frecuentemente. La ventaja que proporcionan las caches básicamente es eliminar los tiempos de acceso a un recurso externo para recuperar los datos que ahora se encuentran mantenidos en cache, si no optimizamos con la carga de objetos que se reutilizan la ventaja se anula.

Características

Las principales características que presenta esta librería:

  • Incremento de la velocidad de acceso incrementa la velocidad de acceso a los objetos tanto desde memoria como desde disco.
  • El diseño es simple. La curva de aprendizaje de esta API es muy reducida ya que su diseño no es complejo
  • Configuración sencilla No es necesario realizar una configuración. Arrancará con unas características por defecto. Existen opciones de configuración de la cache que se pueden inicializar usando un fichero externo xml
  • Distintos soportes para los datos Se ofrecen distintos soportes para almacenar la información
  • Soporte de varias caches Es posible crear y mantener más de una cache , siempre que les demos un nombre que sirva como referencia individual. Cada caché estará asociada al menos a un CacheManager. Este CacheManager no tiene por que ser único, es perfectamente posible tener varios , siempre que su configuración no entre en conflicto.
  • Distintos tamaños de cache Se puede especificar el tamaño de la cache. Es importante que el tamaño se ajuste a las necesidades de la aplicación para obtener un rendimiento óptimo.
  • Políticas de expulsión.Las políticas son necesarias para controlar el tamaño y los datos que deben de abandonar la cache. Ehcache establece unas políticas de expulsión muy restrictivas. Las políticas de desahucio de Ehcache son:
    • LRU. Se elimina el objeto que mas tiempo lleva sin usarse
    • LFU. Se elimina el objeto que es menos usado
    • FIFO. El primero que entró es el que se elimina. Se eliminan los objetos antiguos.
  • Caches persistentes. Si se quiere los datos almacenados en una cache con soporte de disco, puedan subsistir a una parada de la máquina virtual
  • Eventos. Podemos configurar mediante eventos nuestro código para que responda a distintas acciones que suceden en las caches, como la inserción de una nueva entrada, o la eliminación de ella.
  • Excepciones. También podemos interceptar de manera fácil cualquier excepción que se produzca, evitando que la excepción se propague sin control.
  • Inicializadores de cache. Cargan la cache con valores por defecto al inicio de cada aplicación.

Ejemplos

Para crear una región en la caché hay que modificar el archivo de configuración ehcache.xml El archivo ehcache.xml tiene que residir en la raíz del classpath. En la raíz del jar de Ehcache hay un archivo de configuración de ejemplo (ehcache-failsafe.xml), que tiene configurada una región predeterminada. Podemos copiar este archivo a nuestro proyecto y renombrarlo como ehcache.xml. A dicho archivo el agregaremos un región llamada "MADEJA". Esta región mantendrá los elementos durante 1 segundo, y luego serán borrados de la región (atributo timeToLiveSeconds).

<cache name="MADEJA"
           maxElementsInMemory="10000"
           maxElementsOnDisk="1000"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="300"
           timeToLiveSeconds="1"
           memoryStoreEvictionPolicy="LFU"
            />

Ahora se accede a la cache, subimos un elemento al cache, y luego lo recuperaremos. Por último, esperaremos unos segundos y veremos cómo al volver a recuperar el objeto, el mismo no está más. Este método se ejecuta dentro de un test de JUnit

@Test
    public void testCache() throws InterruptedException {
        Persona persona = new Persona();
        persona.setId("1");
        persona.setNombre("Zim");
        CacheManager manager = new CacheManager();
        Cache cache = manager.getCache("dosIdeas");
         //al cache se suben objetos Element. Un element consta de una clave y un valor.
        //La clave sera el medio para recuperar el objeto mas tarde. En el ejemplo, el "id" de la Persona.
        Element element = new Element(persona.getId(), persona);
        cache.put(element);
        Persona personaCache = (Persona) cache.get(persona.getId()).getObjectValue();
        assertEquals(persona, personaCache);
         //esperamos unos instantes para que expire el cache...
        Thread.sleep(1500);
        assertNull(cache.get(persona.getId()));
    }

Versiones

Se recomienda el uso de la JDK 1.5

Contenidos relacionados

Pautas