У меня есть вопросы по поводу утверждений, которые я нашел во время прохождения урока кэширования в спящем режиме.
Statement1: -Кэш первого уровня всегда ассоциируется с объектом Session. Hibernate использует этот кеш по умолчанию.
Вопрос1: -
Поскольку этот кэш по умолчанию содержит все результаты таких методов сеанса, как загрузка, получение и т. Д. Не будет ли это серьезной проблемой с памятью из-за удержания всех объектов в видении?
Вопрос2: -
Нужно ли включать этот кеш или его там по умолчанию? Можно ли отключить кэш первого уровня, если я хочу? Если да, то как?
Ниже приведены вопросы как для кэша первого уровня, так и для кэша второго уровня
Вопрос3: -
Если я получу один и тот же объект из кэша (скажем, я загружаю объект customer с обычным значением 1 дважды в одном сеансе), оба объекта, возвращенные из кэша, будут иметь разные ссылки на объект, лежащий в кэше. Правильно? Потому что, если я обновлю какое-то поле в объекте customer, оно не будет отображаться в кэше до тех пор, пока не будет вызван метод сохранения / обновления.
Вопрос4: -
Насколько я понимаю, если мы попытаемся получить объект customer с идентификатором 1 во второй раз из этого кэша, он вернет тот же старый объект, даже если он был обновлен между ними. Как мы можем гарантировать, что если оно обновлено, оно считывает данные из базы данных, иначе из кэша? Я думаю, мы можем использовать стратегию чтения-записи с кэшем с классом, подобным EHCache
Вопрос5: - Кэширование запросов
Я прочитал это утверждение: -Обновления в запросах происходят очень часто. Таким образом, для кэширования запросов необходимы две области кэша.
Для сохранения результатов (значения идентификатора кэша и результаты только для типа значений).
Для хранения самых последних обновлений.
Я думаю, что «обновления в запросах происходят очень часто» означает, что здесь мы обычно меняем какое-то значение параметра, например select * from customer where custid=?
Так что id
будет изменено для другого идентификатора клиента. Таким образом, кеш запросов будет хранить каждый запрос (вместе с параметром) и результаты, возвращаемые каждым запросом.
Правильно? Но не уверен, зачем нам два кеша для кеширования запросов?