Symfony2: A gyorsítótár saját maga kezelése
A gyorsítótár mindenhol jelen van a számítástechnikában és szerencsére máshol is. Enélkül a feldolgozási idő sokkal hosszabb lenne! Egy olyan időszakban, amikor minden, a névhez méltó keretrendszer gyorsítótár-rendszert használ, miért kellene magunknak kezelnünk a gyorsítótárat?
Sommaire
Gyorsítótár a Symfony2-ben
A Symfony2-ben egyszerűen beállíthat egy gyorsítótár-rendszert. Emellett, ha pontosak akarunk lenni, úgy tűnik, hogy a Symfony saját gyorsítótár-rendszerrel rendelkezik (app/cache/env/), és hogy szerverszinten is csatlakoztathatunk gyorsítótár-rendszert (Apache, IIS, …). Ez a gyorsítótár teljes mértékben kezelhető, a memória pedig ingatag. Amint a szerver újraindul, a szerver gyorsítótár törlődik.
Caching rendszerek
Milyen gyorsítótárazási rendszerek léteznek? Az emlékezetből három program jön elő rendszeresen.
- XCache
- memcached
- APC
Az APC most elavult PHP 5.4 óta, ezért nem javaslom, hogy próbálja meg csatlakoztatni.
Az én esetemben az XCache-t fogom használni. Az XCache telepítéséről szóló bejegyzésemet is megtalálod.
Miért kezelheti saját maga a gyorsítótárat?
Látok néhány megjegyzést, amelyek azt kérdezik: „Miért? ". Míg a Doctrine lehetővé teszi a gyorsítótár egyszerű használatát a módszerén keresztül useResultCache(használat, késleltetés, azonosító). A válaszom egyszerű: ingyenes kezeléseket végezni.
Egy kis példa, hogy ötleteket adjak. Tegyük fel, hogy gyorsítótárazok egy elemet egy adatbázisból. Ha módosítom ezt az entitást, a gyorsítótár nem frissül, amíg az adatok le nem járnak. A személyre szabott gyorsítótár-kezeléssel még azelőtt, hogy a gyorsítótár elérné a megadott időt, képes leszek újra beállítani az új adatokat és felülírni a régieket. Ez jelentős gazdálkodást igényel, de a teljesítménynövekedés jelentős lehet.
Symfony2 és hogyan kezelheti saját gyorsítótárát
Ezt a kis emlékeztető kódot ajánlom Önnek, hogy könnyen kezelje. Esetünkben ennek a lényegnek a funkciója egy SQL lekérdezés eredményét kívánja visszaadni.
Prototípus: függvény végrehajtása ($sql_query, $id = null, $delay = 3600);
beállításokat:
- _sqlkérdés megfelel a végrehajtani kívánt SQL lekérdezésnek.
- id a gyorsítótárazott adatokhoz kötött azonosító. Az x azonosítóhoz x tartalom lesz.
- késleltetés a gyorsítótár érvényességének maximális időtartama. Alapértelmezés szerint 3600 másodperc. Ez azt jelenti, hogy az adatok gyorsítótárazása után 3600 másodpercig elérhetők lesznek.
12345678910111213141516171819202122232425262728funkció kivégez ($sql_query, $id = null, $delay = 3600){// Egy gyorsítótár-példányt deklarálunk$cacheDriver = új DoctrineCommonCacheXcacheCache();$eredmények = null;//Ha megadtak egy azonosítót, és a gyorsítótár-rendszer egy "x" azonosítóhoz tartalmaz adatokatif ($id!= null && $cacheDriver->contains($id)) {//Ezután a gyorsítótárazott adatokat egy "x" azonosítóhoz vesszük$eredmények = $cacheDriver->fetch($id);}//Ha nincs adat, abban az esetben, ha a gyorsítótárazott adat nullával egyenlőif ($eredmények == null) {//Lekérjük az adatokat$eredmények = $ ezt->container->get("tan")->getManager()->getRepository("NamespaceNameBundle:Entity")->mindent megtalál();//Ha van gyorsítótárazási azonosítónkif ($id!= null) {//Az adatokat x ID-re és y késleltetésre mentjük$cacheDriver->save($id, $eredmények, intval($delay));}}//Az eredményeket a jövőbeni kérések korlátozásával küldjük visszavisszatérés $eredmények;}
Nos, remélem, ez a feljegyzés segít. Hamarosan találkozunk, és köszönöm, hogy elolvastad ezt a bejegyzést!