Как кеш от второ ниво хибернация примери - блог Анатолий Корсаков

Кеширане е една възможност, предоставена от рамки, ORM, което помага на потребителите да постигнат висока скорост, и в същото време да помогнете на себе си рамки, за да се намали броят на повикванията към базата данни. Хибернация осигурява тази функция на две нива.







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

За разлика от кеш от първо ниво в кеш паметта от второ ниво трябва директно да включва в настройките на хибернация, и се осъществява доставчик, кеш библиотека от трета страна.

Така че това означава, че ако имате два случая на сесията фабрика (нормално приложение със сигурност няма да е толкова развита), ще имате две кеш в диспечера на приложение, и можете да получите неочаквани резултати.

Как кеш от второ ниво хибернация примери - блог Анатолий Корсаков

В този урок ще обсъдят концепцията за кеш от второ ниво, и да даде примери за употреба. Втората част може да прочетете тук.

Но преди това, аз ще ви обясни понятието "обезсилване". Документацията е обща представа за обезсилване (обезсилва) кеш е остаряла данните в кеша след кеш премества в това състояние, той трябва да бъде изчистен от стари данни чрез премахване и повторно се актуализира с нови стойности, след ъпгрейд, кеша става валиден (Проверка) състояние.

Как кеш от второ ниво

Нека да пишат всички факти:

  1. кеш първо ниво кешира главно лице. но поддържа опция кеш заявка.
  2. Всеки път, когато на хибернация сесия се опитва да зареди от съществено значение, най-първото място, където ще започне да търси това е кеширано копие на същността на кеш от първо ниво (свързано с частична сесия).
  3. Ако кеширана копие на предприятието се намира в кеша първо ниво, той ще се върне като резултат от метода на зареждане ().
  4. Ако не е намерен в кеша първо ниво, кешът се търси във второто ниво (ако е разрешен).
  5. Ако на кеш паметта от второ ниво е кеширана лице, той ще се върне като резултат от метода на зареждане (). Но преди да се върне на същността, той ще остане в кеш паметта на първо ниво, както и, така че следващото обаждане до същността на метода на изтегляне ще се върне на същността на кеша в първото ниво и вече няма нужда да го потърсите в кеш паметта на второ ниво отново.
  6. Ако не се намери на предприятието в кеша първо ниво, нито в кеш паметта от второ ниво, заявката се изпълнява в предприятието DB и да остане в двете кеш преди да се върне в резултат на обадите на товара ().
  7. кеш от второ ниво следи за промени на предприятието от кеша. Ако модификации са направени чрез сесия API.
  8. Ако даден потребител или процес на извършване на промени директно в базата данни, кеша на второ ниво има възможност за надграждане на времето «timeToLiveSeconds» действа за региона на кеш. В този случай, добра идея е да се обезсили целия кеш и ще позволи на хибернация, за да изгради своя кеш отново. Можете да използвате следния код, за да обезсили цялата кеш във второто ниво:






Вътрешността на кеша

Всеки обект се съхранява като CacheEntry и всяка структура се превръща в хидратирано състояние да създадете запис в кеша. От гледна точка на хибернация хидратацията е, когато JDBC ResultSet в масив от сурови стойности:

Това означава, че съхранява информация под формата на масиви от низове, числа и така нататък. Д. и идентификаторът на обект служи указател към информацията. Концептуално, това е нещо като карта, където идентификатора на обекта - ключът, и файлове с данни - стойност. Приблизително един може да си го представя по следния начин:

състояние "хидратна" се запазва в сегашния Устойчивост контекста работи като обект EntityEntry. че капсулира същността на моментна снимка, направена по време на изтегляне. След това, това състояние се използва за:

  • "Мръсни" механизма за проверка по подразбиране, която сравнява текущите данни срещу същността на заснетата снимка по време на багажника
  • второ ниво кеш, където записите в кеш са компилирани от този хидратирана състояние.

обратната операция се нарича дехидратация и преписи на състоянието на природата в изявленията вложката и актуализация.

Как кеша на заявката (заявките кеш)?

кеша за заявки е концептуално прилича хеш Мапа, където ключът служи в състава на текста и стойностите на параметъра на заявката, както и стойността на Id е списък на лицата, които са подходящи за:

Някои въпроси, не се връщат на предприятието, вместо те се връщат само примитивни стойности. В този случай, на самите стойности се съхраняват в кеша за запитване. Кешът на заявка е изпълнена, когато кеширана JPQL / HQL заявка.

Как са кеш от второ ниво и заявка кеш?

Ако искането се извършва преди кеширани резултати, SQL заявка към базата данни на няма да бъде изпратен. Вместо това, резултатите от заявките от кеша на заявка за стягане, а след това кеширана идентификатор лице ще бъдат използвани, за да се получи от кеша от второ ниво.

Ако кеш паметта от второ ниво съдържа данни за идентификация, тя е същността на обезводняващо и я върне. Ако кеш от второ ниво не съдържа резултатите за ID, след SQL заявката за се изпълнява, за да заредите от предприятие на базата данни.

Как да се даде възможност и конфигуриране на кеша от второ ниво?

Първата стъпка е да се включи зависимостта хибернация-ehcache ви пом файл.

По подразбиране, кеша от второ ниво е изключено и да я активирате, трябва да настроите следните свойства на хибернация:

или XML конфигурация:

RegionFactory задава втори доставчик ниво на кеш паметта и изисква имота hibernate.cache.region.factory_class областта на изложени на стойност вярно hibernate.cache.use_second_level_cache собственост.

Следващата стъпка е да конфигурирате настройките на кеша в регионите си кеш-config.xml файл, описание на настройките са дадени във втората част:

За да се даде възможност на ниво кеширане лице, ние трябва да се остави на резюмето на кеширана лице:

Асоциацията също могат да бъдат кеширани кеш от второ ниво, но това не е активирана по подразбиране. Кеширане асоциации от които се нуждаем, за да зададете анотация @Cache до самата асоциация:

СПА предвижда също анотация @Cacheable, но той не поддържа инсталирането на свойствата на едновременност стратегия на ниво същност.

Как да се използва кеш заявка?

презимуват със заявки за кеширане подразбиране използва две кеш памет:

  • org.hibernate.cache.StandardQueryCache. Cache се използва, ако не е изрично посочено в искането, което име област / Cache използван съдържа кеширана резултатите от заявката. По подразбиране, не спят зимен сън кеш обезсилва StandardQueryCache (SQC), т. Е. не го премахва, когато стане остарели или когато манипулират обекти са били направени в кеш паметта, например обновяване или изтриване на лица.
  • org.hibernate.cache.UpdateTimestampsCache. Той съдържа времеви отпечатъци (времеви отпечатъци) най-скорошните промени кешират таблици. Е, необходима за валидиране на резултатите, които е получил от кеша за запитване.

След конфигуриране на кеша заявка, нито една молба не е zakeshiruetsya подразбиране. Исканията трябва да бъдат изрично посочени, например:

И пример за това как да маркирате заявката за Критерии като кеширани:

(Посетени 557 пъти, 1 посещения днес)