EHCache, как проверить, есть ли что-то в кэше или нет? - PullRequest
8 голосов
/ 22 июня 2011

Есть ли способ проверить, находится ли объект внутри управляемого кэша EHCache?

Проблема, с которой я сталкиваюсь, заключается в том, что я реализовал метод, который извлекает одно значение из базы данных (находка (ключ))метод).Результат этого метода find хорошо кэшируется EHCache, но теперь я хочу уменьшить количество sql-запросов, возникающих в результате вызова метода в несколько раз.

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

Так что я хотел бы переделать некоторые вещи.Идея заключалась в том, что я беру аргументы в методе find (список ключей), выполняю большой SQL-запрос и затем помещаю результаты в кеш, я не оборачиваюсь вокруг этого, но после записи это выглядит как вручнуюизменение кеша также не требуется ..

Любое понимание или подсказки приветствуются!

Ответы [ 3 ]

3 голосов
/ 23 октября 2013

Можно получить доступ к статистике гибернации + статистике ehcache и т. Д. Через jmx. EhcacheHibernateMBean - это основной интерфейс, который предоставляет все API через jmx. Он в основном расширяет два интерфейса - EhcacheStats и HibernateStats. И как следует из названия, EhcacheStats содержит методы, связанные с Ehcache и HibernateStats, связанные с Hibernate. Вы можете увидеть скорость попадания / пропуска / попадания в кэш, динамически изменять значения элемента конфигурации - например, maxElementInMemory, TTI, TTL, включать / отключать сбор статистики и т. Д. И многое другое. Это может быть достигнуто в вашем приложении, переопределив метод buildSessionFactory () в LocalSessionFactoryBean, добавив tc.active как «истинное» системное свойство, когда кэш второго уровня включен в конфигурации Hibernate

  @Override
        protected SessionFactory buildSessionFactory() throws Exception {
                Properties properties = this.getHibernateProperties();
                String secondLevelCache = (String) properties
                                .get("hibernate.cache.use_second_level_cache");
                if (secondLevelCache.equals("true")) {
                        System.setProperty("tc.active", "true");
                }
                return super.buildSessionFactory();
        }

Нет, когда вы получаете доступ к своему приложению через JMX, перейдите на вкладку Mbeans, слева перейдите к net.sf.ehcache.hibernate -> net.sf.ehcache.Cachemanager @ ..

При этом перейти к атрибутам. Нажмите на атрибуты и на правой стороне, проверьте RegionCacheAttriutes.

enter image description here

Примечание : представление изменилось с JDK1.7. После входа в консоль JMX перейдите к net.sf.ehcache.hibernate на вкладке Mbeans. Нажмите на CacheRegionStats. Если щелкнуть по нему, откроется экран справа. Дважды щелкните в верхней части, и появится табличная навигация, как показано ниже. Вам придется перемещаться по табличной навигации, чтобы найти количество интересующих вас объектов.

2 голосов
/ 22 июня 2011

возможно isKeyInCache ?

0 голосов
/ 28 июля 2011

Вы смотрели на SelfPopulatingCache and or BlockingCache? Они будут блокировать все вторичные запросчики после того, как будет начато извлечение базы данных, пока кэш не заполнится

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