Неверная статистика ehcache: хиты + промахи == 0 - PullRequest
13 голосов
/ 10 марта 2011

У меня проблема, когда появляется net.sf.ehcache.CacheManager возвращает неверную статистику.

Я использую ehcache-core v2.3.2 (последняя версия) с ehcache-spring-annotations.

Проблема в том, что getMemoryStoreObjectCount возвращает 1 объект, в то время как оба getCacheHits и getCacheMisses возвращают 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>

dao

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

Ответы [ 3 ]

16 голосов
/ 15 июля 2011

Добавьте statistics = "true" в ваш ehcache.xml, как правило, лучше сохранить изменения конфигурации вне вашего кода.

<ehcache>
     <defaultCache ... statistics="true" />
...
</ehcache>
16 голосов
/ 11 марта 2011

Нашел решение проблемы, установив следующие свойства в net.sf.ehcache.hibernate.EhCache:

  cache.setStatisticsEnabled(true);
  cache.setStatisticsAccuracy(Statistics.STATISTICS_ACCURACY_GUARANTEED);
5 голосов
/ 10 января 2012

<defaultCache ... statistics="true" /> работает значительно в отличие от старого способа cache.setStatisticsEnabled (true);для этого нужна более низкая версия ehcache (ядро и т. д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...