Ehcache против реализации кэша статической карты

#java #hibernate #caching #jpa-2.0 #ehcache

#java #переход в спящий режим #кэширование #jpa-2.0 #ehcache

Вопрос:

У меня есть несколько таблиц с очень небольшим количеством записей в них, и они никогда не будут меняться динамически. итак, я хочу кэшировать всю таблицу в памяти, чтобы уменьшить нагрузку на БД. Я могу легко достичь этого с помощью статической карты и заполнения карты в статическом блоке.

мне было интересно, возможно ли то же самое более эффективным способом с помощью Ehcache hibernate?

Комментарии:

1. Можете ли вы предоставить простые реализации карты для кэша?

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

3. Спасибо новичку, я внедрил статическую карту, но не обновляю ее каждые 12 часов. Я рассмотрю это, если возникнет необходимость.

Ответ №1:

Ehcache обладает намного большим количеством функций, чем карта:

  • ограничить максимальное количество элементов в памяти
  • переполнение на диск (при превышении указанного выше числа)
  • установите время работы и время простоя для элементов
  • позволяет выполнять репликацию внутри кластера

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

Ответ №2:

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

Вы можете сохранять отношения с другими объектами (даже не кэшированными); вы можете использовать кэш запросов и по-прежнему выполнять запросы к этим объектам (и результаты этих запросов также будут кэшироваться).

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

Комментарии:

1. я согласен, что использование Ehcahe сохранит единообразие кода (способ доступа к другим объектам), но есть ли способ предварительно заполнить ecache при запуске сервера, как я могу сделать в реализации map статическим блоком для первоначального заполнения карты?

2. Выполнение запроса HQL, загружающего все объекты, должно сработать: выберите c из CachedEntity c.