ehcache统计信息不正确:命中+未命中== 0

时间:2011-03-10 18:03:48

标签: java hibernate spring annotations ehcache

我遇到问题,显示net.sf.ehcache.CacheManager会返回无效的统计信息。

我正在使用ehcache-core v2.3.2(最新版本)ehcache-spring-annotations

问题getMemoryStoreObjectCount返回 1 对象,而getCacheHitsgetCacheMisses都返回 0 。总计数是不是 hits + misses

下面的单元测试应该说明问题(它应用于数据库):

@Test
public void testCache() {
    Entity e = ..
    dao.storeEntity(e);
    dao.getEntity(e);
    assertEquals(1, cache.getStatistics().getMemoryStoreObjectCount()); // ok
    assertEquals(0, cache.getStatistics().getCacheHits()); // ok
    assertEquals(1, cache.getStatistics().getCacheMisses()); // fails due to 0

}

为了完整性,我包括所有基本配置:

Spring config

<ehcache:annotation-driven cache-manager="ehCacheManager" />
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache.xml"/>
</bean>

ehcache.xml中

<ehcache>
     <defaultCache eternal="false" maxElementsInMemory="1000"
        overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
        timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>
</ehcache>

@Cacheable(keyGenerator=@KeyGenerator(name="StringCacheKeyGenerator"))
public Entity getEntity(Serializable key) {
    return // sql ... 
}

3 个答案:

答案 0 :(得分:16)

通过在net.sf.ehcache.hibernate.EhCache中设置以下属性找到问题的解决方案:

  cache.setStatisticsEnabled(true);
  cache.setStatisticsAccuracy(Statistics.STATISTICS_ACCURACY_GUARANTEED);

答案 1 :(得分:16)

statistics =“true”添加到您的ehcache.xml中,通常最好将配置更改保留在代码之外。

<ehcache>
     <defaultCache ... statistics="true" />
...
</ehcache>

答案 2 :(得分:5)

<defaultCache ... statistics="true" />非常有用 与旧方式cache.setStatisticsEnabled(true)相反;需要较低版本的ehcache(核心等)。