Кэш 2-го уровня гибернации: невозможно выселить

Я использую Hibernate 4.1.7 и EhCache в качестве кеша второго уровня. Я реализую услугу отдыха, чтобы очистить cahce (выселить все регионы) по мере необходимости.

Ниже приведен фрагмент кода

org.hibernate.stat.Statistics statistics = HibernateUtil.getSessionFactory().getStatistics();
      statistics.setStatisticsEnabled(true);

      long hits = statistics.getSecondLevelCacheHitCount();
      long misses = statistics.getSecondLevelCacheMissCount();
      long puts = statistics.getSecondLevelCachePutCount();

      logger.info("Hits: " + hits + " Misses: " + misses +  " Puts:" + puts);


      cache.evictEntityRegions();

      hits = statistics.getSecondLevelCacheHitCount();
      misses = statistics.getSecondLevelCacheMissCount();
      puts = statistics.getSecondLevelCachePutCount();


      logger.info("Hits: " + hits + " Misses: " + misses +  " Puts:" + puts);         

      long hit0 = statistics.getQueryCacheHitCount();
      long miss0 = statistics.getSecondLevelCacheMissCount();

К сожалению, после удаления всех регионов я получаю одинаковые значения для попаданий / промахов и размещений.


person jprism    schedule 18.04.2018    source источник


Ответы (1)


Эти числа имеют следующее значение:

  • Hits - количество раз, когда Hibernate проверял кеш на предмет наличия объекта и этот объект был найден, то есть уже был в кеше.
  • Промахи - количество раз, когда Hibernate проверял кеш для объекта, но этот объект не был найден в кеше (поэтому его нужно было бы извлечь из базы данных).
  • Puts - сколько раз Hibernate помещал объект в кеш

Эта статистика не дает вам текущего количества элементов в кеше. Имея это в виду, очистка кеша не повлияет на эти числа.

Если вы действительно хотите сбросить статистику, используйте

statistics.clear()

Но если вы хотите проверить фактический размер кеша, вы можете использовать

CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("com.example.MyEntity").getSize();

Обратите внимание, что каждая сущность имеет свой собственный кэш, имя которого определяется с использованием полного имени класса для этой сущности.

person codemonkey    schedule 18.04.2018
comment
Спасибо, это помогает. - person jprism; 19.04.2018