Hibernate + EhCache, продолжайте пропускать кеш

Я настроил несколько своих объектов для кеширования (в файле сопоставления), и, насколько я вижу, для этого конкретного объекта кеш работает не так хорошо.

Для других объектов я вижу, что количество попаданий увеличивается на каждой итерации, но количество промахов равно 0, тогда как для этого я вижу, что оно промахивается каждый раз за сеанс.

Elements in Memory: 8305 
Elements on Disk: 0 
Hit Count: 24915 
Missed Count 8305 
Put Count: 8305

Я ищу некоторые указатели на то, что может быть не так.

  • В качестве фона я проверил реализации equals и hashCode, и даже отладка, кажется, возвращает правильные результаты.
  • Этот конкретный объект используется в коллекциях для других объектов, а также объекта верхнего уровня.

person webclimber    schedule 17.08.2009    source источник
comment
Нужна помощь stackoverflow.com/questions/17046830/   -  person jGeek    schedule 13.06.2013


Ответы (1)


Конечно, эта статистика показывает, что вы правильно попадаете в кеш.

Если вы получаете объект по его идентификатору, Hibernate выполнит примерно следующие шаги:

  1. Зарегистрируйтесь в кеше первого уровня (объект Session)
  2. Проверьте кеш второго уровня и пропустите
  3. Загрузить объект из БД
  4. Поместите в кеш второго уровня для следующего раза

Наиболее вероятным объяснением того, что другие объекты не регистрируют промах, является то, что вы не обращаетесь к ним по их идентификатору, а используете запрос или какую-то ассоциацию, где прямой доступ к кешу невозможен.

person Gareth Davis    schedule 17.08.2009