2012-09-13 12 views
5

¿Alguien puede confirmar si las configuraciones TTL, p. timeToLiveSeconds se puede configurar usando el plugin de caché Grails con la extensión ehcache?Grails cache-ehcache plugin y TTL values ​​

La documentación para el complemento base establece explícitamente que TTL no es compatible, pero la extensión ehcache menciona estos valores. Hasta ahora no he tenido el establecimiento de valores TTL para mi caché éxito:

grails.cache.config = { 
    cache { 
     name 'messages' 
     maxElementsInMemory 1000 
     eternal false 
     timeToLiveSeconds 120 
     overflowToDisk false 
     memoryStoreEvictionPolicy 'LRU' 
    } 
} 

@Cacheable('messages') 
def getMessages() 

Sin embargo, los mensajes permanecen en caché de forma indefinida. Puedo vaciar manualmente el caché usando la anotación @CacheEvict, pero esperaba que TTL fuese compatible cuando usaba la extensión ehcache.

Gracias

+0

se hizo esta pregunta hace mucho tiempo, pero ver https://jira.grails.org/browse/GPCACHEEHCACHE-6 –

+0

@Ken ese enlace está roto ahora – GreenGiant

Respuesta

6

Sí, el plugin cache-ehcache definitivamente admite TTL y todas las propiedades de configuración de caché que son compatibles nativamente con EhCache. Como se indica en el documento, el complemento de caché base implementa un caché en memoria simple que no admite TTL, pero el DSL de caché pasará a través de cualquier configuración de configuración desconocida al proveedor de caché subyacente.

Puede configurar los ajustes de Ehcache añadiendo lo siguiente a Config.groovy o CacheConfig.groovy:

grails.cache.config = { 
    cache { 
     name 'mycache' 
    } 

    //this is not a cache, it's a set of default configs to apply to other caches 
    defaults { 
     eternal false 
     overflowToDisk true 
     maxElementsInMemory 10000 
     maxElementsOnDisk 10000000 
     timeToLiveSeconds 300 
     timeToIdleSeconds 0 
    } 
} 

Puede verificar la configuración de caché en tiempo de ejecución de la siguiente manera:

grailsCacheManager.cacheNames.each { 
    def config = grailsCacheManager.getCache(it).nativeCache.cacheConfiguration 
    println "timeToLiveSeconds: ${config.timeToLiveSeconds}" 
    println "timeToIdleSeconds: ${config.timeToIdleSeconds}" 
} 

Véase el EhCache javadoc for CacheConfiguration para el otro propiedades de caché. También puede habilitar el registro de depuración detallado del almacenamiento en caché al iniciar sesión grails.plugin.cache y net.sf.ehcache.

Tenga en cuenta que los complementos de caché Grails implementan su propio administrador de caché que es diferente y diferente del gestor de caché EhCache nativo. Si ha configurado EhCache directamente (utilizando ehcache.xml u otros medios), estas memorias caché se ejecutarán por separado de las cachés administradas por el complemento Grails.

Nota: Hubo un error en las versiones anteriores del complemento Cache-EhCache donde la configuración TTL no se estaba configurando correctamente y los objetos caducaban en un año; esto fue arreglado en Grails-Cache-Ehcache 1.1.

0

La propiedad TTL es compatible con el plugin núcleo ehcache. ¿Cómo estás instalando el complemento? Para mi proyecto, solo tengo:

compile ":cache-ehcache:1.0.0" 

en BuildConfig.groovy en el cierre de complementos. Dado que este complemento tiene una dependencia en el complemento de caché Grails central, no necesita declararlo.

0

Podría resolver este problema anulando la configuración en el momento de inicio con el script grails-app/conf/BootStrap.groovy.

Por ejemplo, este es el script para anular el tiempo de vida predeterminado a 60 segundos de un caché con nombre "mycache":

class BootStrap { 

    def grailsCacheManager 

    def init = { servletContext -> 
     grailsCacheManager.getCache("mycache").nativeCache 
         .cacheConfiguration.timeToLiveSeconds = 60 
    } 
    def destroy = { 
    } 
} 
Cuestiones relacionadas