Hogyan másodszintű cache hibernált példák - blog Anatolij Korszakov

Gyorsítótárral lehetőséget nyújt az ORM keretek, amelyek segítségével a felhasználók magas kerületi sebesség, és ugyanakkor segítenek magukon keretek számának csökkentése hívások az adatbázishoz. Hibernate biztosítja ezt a funkciót két szinten.

Egyszer, egyszer a második szintű cache entitás objektum használata egész élete SessionFactory objektumot. azaz hatálya cache - minden programunk. Hogy pontosabbak legyünk, ahogy beállítani a cache, így azt állítja, és hogy. Ez azt is jelenti, hogy ha a gyár zárt gyűlésén, a teljes cache „meghal” társítva, és a gyorsítótár-kezelő is ki van kapcsolva.

Ezzel szemben az első szintű cache a második szintű cache kell tartalmaznia közvetlenül Hibernate beállításokat, és megvalósul a szolgáltató, egy harmadik fél könyvtár cache.

Így jelent ez, hogy ha van két esetben ülés gyári (normál app biztosan nem lesz olyan fejlett), akkor két cache az alkalmazás menedzser, és akkor kap váratlan eredmények.

Hogyan másodszintű cache hibernált példák - blog Anatolij Korszakov

Ebben a tutorial fogom taglalni az második szintű gyorsítótárral, és így példákkal illusztrálva. A második rész itt olvashatunk.

De mielőtt ezt fogom elmagyarázni a „érvénytelenítés”. A dokumentáció közös fogalma érvénytelenítés (érvénytelenített) gyorsítótár állott adatokat a cache után cache költözött ebbe az állapotba, hogy meg kell tisztítani a régi adatokat eltávolításával és újra frissíteni az új értékek, a frissítés után, a cache válik érvényessé (érvényesítsük) állam.

Hogyan működik másodszintű gyorsítótár

Írjuk az összes tényt:

  1. első szintű cache gyorsítótáraz elsősorban entitás. de támogatja opcionális lekérdezés cache.
  2. Amikor Hibernate ülésén megpróbálja betölteni a lényege, hogy a legelső helyen, ahol megkeresi azt a tárolt másolata a lényege az első szintű cache (társított részleges ülés).
  3. Ha a tárolt példányt a szervezet jelen van az első szintű cache, akkor vissza, mint az eredmény az eljárás load ().
  4. Ha nincs találat, az első szintű cache, a cache keresett a második szint (ha engedélyezett).
  5. Ha a második szintű cache cache egység, akkor vissza, mint az eredmény az eljárás load (). De mielőtt visszatér a lényeg, akkor marad a cache az első szinten is, így a következő hívás a lényege a letöltési mód visszatér a lényege a cache az első szinten, és már nem kell keresni azt a cache, a második szintet.
  6. Ha az egység nem található a gyorsítótárban az első szinten vagy második szintű gyorsítótárral, akkor az adatbázis-lekérdezés lefut és a lényeg marad mindkét cache, mielőtt visszatér eredményeként hívja a load ().
  7. Második szintű gyorsítótár nyilvántartja frissítéseket a gazdálkodó a gyorsítótárból. Ha módosításokat végeztünk keresztül Session API.
  8. Ha egy bizonyos felhasználó vagy folyamata módosításokat közvetlenül az adatbázisban, a cache, a második szinten van a lehetőséget, hogy frissítse az idő «timeToLiveSeconds» eljáró cache régióban. Ebben az esetben, egy jó ötlet, hogy érvényteleníti a teljes cache, és lehetővé teszi a Hibernate építeni a cache újra. Használhatja a következő kódot érvényteleníti az egész cache a második szinten:

A belsejét cache

Minden egységnek van tárolva, CacheEntry és mindegyik egység alakítjuk hidratált állapotban, hogy hozzon létre egy bejegyzést a cache. A Hibernate szempontjából, hidratáció az, amikor a JDBC ResultSet egy tömbbe nyers értékek:

Ez azt jelenti, tárolja az információkat formájában tömbök karakterláncok, számok és így tovább. D. és a tárgy azonosító szolgál egy pointert az információt. Fogalmi ez olyasmi, mint térkép, ahol az id a tárgy - a kulcsot, és adatfájlok - értékét. Körülbelül el lehet képzelni, mint ez:

„Hidratált” állapotban van mentve a jelenlegi Perzisztencia Context fut, mint egy tárgy EntityEntry. amely magában a lényege a pillanatfelvétel vett idején letölthető. Ezután ezt az állapotot használjuk:

  • Az alapértelmezett „piszkos” ellenőrzési mechanizmust, amely összehasonlítja a jelenlegi adatok ellen a lényege az elfogott pillanatfelvétel során az indító
  • második szintű cache, amelyben a gyorsítótár bejegyzések épülnek ebből hidratált állapotban.

Az inverz művelet a kiszáradás és másolja a természeti állapot az INSERT és UPDATE.

Hogyan működik a lekérdezés cache (Query cache)?

A lekérdezés cache fogalmilag külleme hash Mapa, hol a kulcs szolgál az összetétele a szöveg és a lekérdezési paraméter értékek, és az értéke Id megtalálja az entitások, amelyek alkalmasak:

Egyes lekérdezések nem adják vissza a szervezet, ehelyett vissza csak primitív értékeket. Ebben az esetben a következő értékeket maguk tárolják a lekérdezés cache. A lekérdezési gyorsítótár ki van töltve, ha a cache JPQL / HQL lekérdezés.

Hogy a második szintű gyorsítótár és a lekérdezés cache?

Ha a kérés előtt végezzük cache eredményeket, az SQL lekérdezés az adatbázis nem lesz elküldve. Ehelyett a lekérdezés eredménye a lekérdezés cache feszesség, majd cache entitásazonosítő fogják használni ahhoz, hogy a második szintű cache.

Ha a második szintű cache adatait tartalmazza az azonosítót, ez a lényege a vízelvonó és hozd vissza. Ha a második szintű cache nem tartalmazza az eredményeket az azonosítót, majd az SQL lekérdezés lefut betölteni az adatbázisból entitás.

Hogyan engedélyezése és konfigurálása a második szintű cache?

Az első lépés az, hogy tartalmazza a függőség hibernálás-Ehcache pom fájlt.

Alapértelmezésben a második szintű gyorsítótár ki van kapcsolva, és az aktiváláshoz, be kell állítani a következő tulajdonságokat hibernált:

vagy XML konfigurációs:

RegionFactory beállítja a második szintű cache-szolgáltató és az ingatlan hibernate.cache.region.factory_class szükséges mezőt a kitett értéke true hibernate.cache.use_second_level_cache tulajdon.

A következő lépés az, hogy konfigurálja a gyorsítótár beállításokat a régiókban a cache--config.xml fájlt, egy leírást a beállítások adják a második rész:

Annak érdekében, hogy caching egység szintjén, meg kell, hogy tegye le az összefoglaló a tárolt egység:

Egyesület is cache második szintű gyorsítótárral, de alapértelmezés szerint nincs engedélyezve. Gyorsítótárral egyesületek be kell állítani a kommentár @Cache maga a szövetség:

JPA is rendelkezik kommentár @Cacheable, de nem támogatja a telepítést tulajdonságainak konkurencia stratégia szintjén lényeg.

Hogyan kell használni a lekérdezés cache?

Az alapértelmezett gyorsítótár-lekérdezések hibernálás használja a két belső cache:

  • org.hibernate.cache.StandardQueryCache. Gyorsítótárat használ, ha nem kifejezetten megadva a kérés, mely régió / cache használt nevet tartalmaz cache lekérdezés eredményét. Alapértelmezés szerint nem hibernálni cache érvényteleníti StandardQueryCache (SQC) t. E. nem távolítjuk el, ha feleslegessé válik, vagy ha manipulálják szervezetek tettek a cache, például frissítésére vagy törlésére szervezetek.
  • org.hibernate.cache.UpdateTimestampsCache. Ez tartalmazza az időbélyeget (timestamps) legutóbbi változásokat cache táblákat. Szükséges a hitelesítése az eredményeket, ami megkapta a lekérdezés cache.

Miután beállította a lekérdezés cache, nincs kérelem nem zakeshiruetsya alapértelmezett. Kéri kifejezetten meg kell említeni, például:

És egy példa, hogyan lehet megjelölni a kritériumok lekérdezést gyorstárazott:

(Nézett 557-szor, 1 látogatók ma)