На домашней странице онлайн -торгового центра есть популярные продукты, поэтому уровень кликов этих продуктов очень высок. Когда пользователь нажимает на популярный продукт, ему нужно ввести подробную информацию о информации, как на Taobao. Затем каждый раз, когда вы нажимаете, вы должны перейти на фон, чтобы запросить подробную информацию продукта, и вы отправите соответствующий оператор SQL. Каждый раз, когда вы обновляете подробную страницу, вы также отправите оператор SQL. Таким образом, производительность определенно будет сильно затронута. Затем использование вторичного кэша Hibernate может решить эту проблему.
Некоторые люди могут подумать, что мы можем использовать перенаправление. Таким образом, когда пользователь впервые посещает, он может узнать информацию и поместить ее в сеанс. В будущем каждый раз, когда пользователь обновляется, он может перейти на сеанс, поэтому нет необходимости запросить в базе данных. Это имеет смысл, но не может решить вышеуказанную проблему, потому что мы хотим решить, что несколько пользователей будут получать доступ к одному и тому же продукту и нажимать на один и тот же продукт. Пере перенаправление может только гарантировать, что тот же пользователь нажимает или обновляет. Но вторичный кэш может решить эти проблемы.
Давайте сначала объясним технологию вторичного кэширования, основанную на Hibernate4.3, а затем сделаем конкретную конфигурацию для этого проекта.
1. Hibernate4.3 Уровень 2 Кэш Базовая конфигурация
В отличие от Hibernate3, основной пакет Hibernate4.3 не имеет классов, связанных с кэшем. Если мы хотим использовать вторичный кэш, нам нужно добавить пакет кэшированного банка. Из официальной загрузки Hibernate-Release-4.3.11.final для вторичного кеша необходимы пакеты JAR, которые должны быть добавлены в проект в первую очередь. следующее:
Затем мы настроим конфигурацию, связанную с вторичным кэшем в hibernate.cfg.xml:
<hibernate-configuration> <session-factory> <name = "dialect"> org.hibernate.dialect.mysqlidialect </property> <name = "show_sql"> true </property> <!-Настройте поставщик вторичного кэша, обратите внимание, что это не кеш-пакет-> <свойство name = "hibernate.cache.region.factory> Это в основном отображает популярные продукты на домашней странице, поэтому класс продуктов поддерживает кэширование-> <class-cache usage = "только для чтения"/> </session-factory> </hibernate-configuration>
Затем мы откроем сервер Tomcat, затем посещаем домашнюю страницу, нажимаем на популярные продукты, и в фоновом режиме не отправляются операторы SQL. Вы можете задаться вопросом, это так просто кеш второго уровня? Просто настроить эти два элемента? Фактически, причина, по которой кэш 2 -го уровня вступил в силу, заключается в том, что он имеет конфигурацию по умолчанию. В приведенном выше Ehcache-Core-2.4.3.jar есть файл ehcache-failsafe.xml, который уже имеет конфигурацию по умолчанию. Мы проанализируем это подробно позже. Давайте впервые проанализируем стратегию запроса Hibernate:
2. Стратегия запроса Hibernate4.3
Hibernate поддерживает два метода запроса: сеан -запрос и запрос HQL.
Есть session.save () update () delete () get () load () и другие методы в сеансе. Этот метод работает только на одной записи, а по умолчанию поддерживает кэш уровня 2 без каких -либо конфигурации. Следовательно: конфигурация только для чтения эффективна для сеанса. Если только для чтения настроена на вторичный кэш в сеансе, операции Session.update () и delete () оба потерпят неудачу. Если вы хотите добиться успеха, вам необходимо настроить чтение-запись. Но save () и get () load () успешны.
HQL: этот метод используется для выполнения нескольких записей по умолчанию, таких как методы List () и executeUpdate (). Этот метод по умолчанию на конфигурацию вторичного кэша, включая только для чтения, является недействительным. hql List () Quersys несколько записей, непосредственно запрашивает базу данных и передает результаты запроса вторичному кэше, что облегчает вызов get () и load (). ExecuteUpdate не поддерживает вторичное кэширование, а также напрямую обновляется в базе данных. Hibernate гарантирует, что база данных и кэш синхронизируются. Примечание: HQL не имеет метода SAVE (). Если вам нужно вставить данные, вы можете позвонить только на метод session.save ().
[Примечание]: кэш первого уровня (существовал по умолчанию) в Hibernate также называется кэшем на уровне сеанса, не используется для повышения производительности, а для обработки транзакций; Кэш второго уровня-это кэш SessionFactory, который действителен для всех сессий, и его жизненный цикл такой же, как и SessionFactory (SessionFactory является синглтоном и будет создан при запуске проекта).
Для конкретных стратегий запроса давайте посмотрим на следующую картинку:
【Примечание】: Если текст изображения слишком маленький, вы можете перетащить изображение в новое окно, чтобы просмотреть ~
Вышеуказанное стратегия запроса Hibernate. Давайте продолжим смотреть на конфигурацию вторичного кэша.
3. Hibernate 4.3 Уровень 2 -го уровня 2
Как упомянуто выше, причина, по которой мы можем использовать кэш уровня 2 после настройки двух элементов в hibernate.cfg.xml, заключается в том, что существует конфигурация по умолчанию. Давайте сначала посмотрим на эту конфигурацию по умолчанию:
<ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceschemalocation = "../ config/ehcache.xsd"> <! path = "java.io.tmpdir"/> <defaultcache maxelementsinmemory = "10000": <!-Максимальное количество объектов, поддерживаемых памятью-> eternal = "false": <!-Независимо от того, является ли объект навсегда действительным, это рекомендуется быть ложным, поэтому следующие два параметра будут действительными-> deffice-inbome-inbole. единица секунды. То есть, если никто не использует этот объект через 60 секунд, он будет уничтожен заранее-> Timetoliveseconds = "120": <!-Жизненный цикл объекта-секунды-> upflowtodisk = "true": <!-Будь то переполнение на жесткий диск, поддерживается, это рекомендуется, чтобы быть истинным,-> максимальниск = "10000000": <-максимальный номер. MemoreStoreEvictionPolicy = "lru": <!-Политика замены объекта-> /> < /ehcache>
Соответствующее объяснение конфигурации по умолчанию уже в комментариях выше. Теперь мы знаем, что именно из-за этой конфигурации по умолчанию можно правильно выполнить кэш второго уровня Hibernate 4.3. Теперь, если мы хотим самостоятельно настроить кэш, нам нужно создать новый файл ehcache.xml в каталоге SRC, а затем реконфигурировать вышеуказанные элементы конфигурации. Далее нам нужно проверить каждую конфигурацию. Перед тестированием я опубликую ситуацию, отображаемую на домашней странице, и сделаю номер. Давайте объясним это позже при тестировании:
Выше приведено часть контента, отображаемого на домашней странице. Hibernate нашла информацию о дисплее из базы данных, и она была отображена. Мы их номер выметим, и его будет легче проанализировать, когда мы тестируем кэш позже. Давайте начнем тестировать элементы конфигурации кэша выше:
Тест 1: Проверьте количество объектов в памяти. Измените конфигурацию на следующую ситуацию:
<defaultcache maxelementsinmemory = "6" <!-Настройка поддерживает только 6 Caches-> eternal = "true" upflowtodisk = "false" memoryStoreevictionPolicy = "fifo": <!-Первый-в-в-первой-> />
После завершения конфигурации мы перезагружаем сервер и открываем домашнюю страницу. Поскольку хранятся только 6 последних 6 записей, найденных в кэше, то есть номер 3-8. Мы нажимаем на любой из продуктов в 3-8, чтобы ввести страницу сведений о продукте. Обратите внимание, что консоль в фоновом режиме не выводит никакой информации о запросе, что означает, что оператор SQL не отправлено. Однако, когда мы нажимаем на продукт № 2, в фоновом режиме отправляется оператор SQL, то есть база данных запросится. Мы снова поддержали и нажали на продукт 2, и заявление SQL не отправлено, что означает, что он был помещен в кэш, но кэш поддерживает только 6 данных. Поскольку настройка стратегия замены объекта в первую очередь в первую очередь, в первую очередь число 3 в кэше было только что удалено. Мы нажал 3, чтобы попробовать и отправить заявление SQL. Таким образом, тест завершен, и выполнение кэша второго уровня является нормальным.
Тест 2: жизненный цикл испытательного объекта. Измените конфигурацию на следующую ситуацию:
<defaultCache MaxElementsInMemory = "100" eternal = "false" <!-только путем подготовки false можно установить следующее жизненный цикл-> dimeToidLeseconds = "20" timetoliveSeconds = "40" OupFlowTodisk = "false" MemoryStoreEvictionPolicy = "fifo" />
Время кэша настраивается как 40 секунд, и если за 20 секунд нет операции, оно будет удалено. Поскольку мы назначили 100 записей, номера 1-8 выше находятся в кэше. После того, как мы включим сервер, мы нажимаем на любого, например, нажимаем на номер 8, и оператор SQL не выдается. Обычно, через 20 секунд, нажмите на номер 8 и отправляйте оператор SQL, указывая на то, что вступивший в силу жизненный цикл вступил в силу. Обратите внимание, что конфигурация не может быть слишком короткой, например, 10 секунд, потому что Tomcat займет несколько секунд. Если на конфигурации меньше, время могло быть до тестирования ... тогда это не сработает.
Тест 3: Проверьте, поддерживает ли вторичный кэш хранение жесткого диска.
<defaultCache MaxElementsInMemory = "4" eternal = "false" <!-только путем установки FALSE может быть установлен следующий жизненный цикл-> TimeDoidLeseconds = "100" Timetoliveseconds = "200" OupFlowToDisk = "true" <!-только настройку истинного хранилища Disk-> MemoryStoreevictionPolicy = "fifo 'Fifo True.
Мы устанавливаем поддержку жесткого диска на True и настроим максимальную емкость для хранения вторичного кэша на 4. Перезапустите сервер. Поскольку вторичный кэш хранит до 4 записей, он должен быть пронумерован 5-8. Нажатие 5-8 определенно не отправит операторы SQL, но когда мы нажмеем 1-4, мы не будем отправлять операторы SQL, потому что мы настроили поддержку для хранения жестких дисков, Hibernate сохранит результаты запроса на жестком диске, поэтому мы также можем получить данные непосредственно без отправки заявлений SQL.
Тест 4: Проверьте стратегию замены кэша уровня 2
<defaultCache <!- FIFO был устранен и не будет использоваться снова ... LRU: Алгоритм, который был доступен, по крайней мере, в последнее время (политика времени), будет игнорировать частоту доступа, и тот, который был доступен в самое давнее время, будет заменен на LFU: Алгоритм, который будет использован, на замену, по меньшей мере, будет нахождение, что будет, что будет, по меньшей мере, будет нахождение, которое будет, что будет, и порядок, который будет наименоваться, и порядок, который будет наиболее часто бывает. -> MaxElementsInmemory = "3" Eternal = "false" <!-только тогда, когда он настроен как false, может быть установлен следующий жизненный цикл-> TimeDoidLeseconds = "100" timetoliveseconds = "200" OupFlowTodisk = "false" <!-Только когда оно настроено, как истинное хранилище диска может быть подтверждено->> MemileVicticationPolcyPOLCYPOLCION
Как следует из названия, LRU и LFU сосредоточены на последнем времени и частоте доступа соответственно. Давайте возьмем LFU в качестве примера. Теперь мы устанавливаем максимальное хранилище на 3 записи, то есть номер 6-8. Теперь мы получаем доступ к номеру 6 три раза, номер 7 дважды, номер 8 один раз, и не будем выпускать операторы SQL. Мы снова получаем доступ к номеру 7 и выпускаем заявления SQL. Теперь номер 7 находится в кэше, номер 8 был удален, поскольку у него наименьшее количество доступа. Мы можем снова щелкнуть номер 8, чтобы протестировать его, выпустить оператор SQL, и тест успешно. Если это LRU, только что удаленное число 6 - номер 6, потому что номер 6 - самый ранний доступ.
На данный момент я считаю, что все освоили использование вторичного кеша, и тест вторичного кэша заканчивается здесь. Давайте создадим конфигурации для нашего проекта онлайн -торгового центра.
4. Фактическая конфигурация проектов онлайн -торговых центров
Мы настраиваем максимальное количество записей во вторичном кэше, равным 1000, устанавливаем жизненный цикл до 120 секунд, а интервальный цикл - 60 секунд. Мы поддерживаем хранение жесткого диска и используем стратегию замены приоритета частоты (LFU), потому что, если пользовательский уровень кликов высок, его необходимо размещать во вторичном кэше.
<ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceschemalocation = "../ config/ehcache.xsd"> <!-если кеш-память. <defaultCache MaxElementsInMemory = "1000" Eternal = "false" timeToidLeseconds = "60" TimetOliveseconds = "120" OupFlowTodisk = "true" MemoryStoreEvictionPolicy = "lfu" /> < /ehcache>
Что ж, в сочетании с проектом онлайн-торгового центра появляется конфигурация и использование кэша второго уровня Hibernate 4.3.
Оригинальный адрес: http://blog.csdn.net/eson_15/article/details/51405911
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.