#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.