1

grails 1.3.9 应用程序中 ehcache 的默认值是什么?特别是我对查询缓存值感兴趣;我通过 postgres 的 psql 删除了几行,但我没有看到我的应用程序中反映的更改。我还没有将 ehcache.xml 文件添加到 conf 目录中。我什至重新启动了 grails 应用程序,数据仍然显示在报告中。没有我可以删除的任何缓存文件作为解决方法吗?

更新:我添加了以下 ehcache.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" >
<diskStore path="/tmp/ehcache_t2"/>
<cacheManagerEventListenerFactory class="" properties=""/>
<defaultCache
   maxElementsInMemory="10000"
   eternal="false"
   timeToLiveSeconds="120">

</defaultCache>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
  maxElementsInMemory="10000"
  timeToIdleSeconds="300"
   />
<cache name="org.hibernate.cache.StandardQueryCache"
  maxElementsInMemory="10000"
  timeToIdleSeconds="30"
   />
</ehcache>

但是 StandardQueryCache 的 timeToIdleSeconds="30" 也不起作用。

4

1 回答 1

1

Grails 将在 conf 目录中查找 ehcache.xml。如果没有找到,它将使用你的类路径中的那个,看看 ehcache-core.jar。您将看到一个名为ehcache-failsafe.xml的文件,您可以在其中找到:

<defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            /> 

要使用查询缓存,您必须在 Datasource.groovy 中进行配置:

hibernate {
    cache.use_second_level_cache=true
    cache.use_query_cache=true
    cache.provider_class='org.hibernate.cache.EhCacheProvider'
}

虽然,就像@GreyBeardedGeek 指出的那样,EhCache 是一个直写缓存。它只会缓存通过休眠及其二级缓存操作的对象。如果您在数据库中编写 sql 查询,它不会在缓存中缓存对象。

要更深入地了解它,请查看此处此处

于 2012-08-10T14:50:49.593 回答