Ehcache无法正常工作

时间:2015-07-31 12:46:38

标签: java hibernate ehcache

在我的应用程序中,我使用带有以下ehcache设置的查询缓存:

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
     updateCheck="false">  

 <defaultCache
    maxElementsInMemory="10000000"
    eternal="false"
    timeToIdleSeconds="0"
    timeToLiveSeconds="3600"
    overflowToDisk="true"
    maxElementsOnDisk="10000000"
    diskPersistent="true"
    diskExpiryThreadIntervalSeconds="1800"  />

<cache name="org.hibernate.cache.internal.StandardQueryCache"
    maxEntriesLocalHeap="10000000"
    eternal="false"
    timeToIdleSeconds="0"        
    timeToLiveSeconds="3600">
        <persistence strategy="localTempSwap"/>
</cache>

<cache name="org.hibernate.cache.spi.UpdateTimestampsCache"
    maxEntriesLocalHeap="5000"
    eternal="true">
        <persistence strategy="localTempSwap" />
</cache>
</ehcache>

然后对于我的实体我有二级缓存,如:

@Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

我的查询如下:

getSession().createQuery("from DynamicScenario").setCacheable(true).list();

工作正常。但是,我在控制台中注意到的是,在对表进行一些更新之后,如更新/插入/删除,无论多少次我一次又一次地执行查询,hibernate仍会调用db来获取数据虽然当我监视ehcache时,这被记录为jConsole中的内存命中。这持续大约30秒,然后在31秒左右,当我再次执行查询时,我可以在控制台中看到,hibernate没有调用db,数据来自缓存。有什么理由吗?似乎hibernate应该释放一些资源来使缓存失效,然后在表更改时重建并持续一段时间......

0 个答案:

没有答案