Symfony2: Menaxhoni vetë cache
Cache është i pranishëm kudo në kompjuter dhe për fat të mirë gjetkë. Pa të, koha e përpunimit do të ishte shumë më e gjatë! Në një kohë kur të gjitha kornizat e denja për emrin përdorin një sistem cache, pse do të na duhej ta menaxhonim vetë cache?
Sommaire
Cache në Symfony2
Në Symfony2, lehtë mund të konfiguroni një sistem cache. Përveç kësaj, nëse do të donim të ishim të saktë, duket se Symfony ka sistemin e vet të cache (app/cache/zili/), dhe se ne gjithashtu mund të lidhim një sistem cache në nivelin e serverit (Apache, IIS, ...). Ky cache është plotësisht i menaxhueshëm dhe memoria është e paqëndrueshme. Sapo serveri riniset, cache e serverit fshihet.
Sistemet e memorizimit
Çfarë sistemesh memorie ekzistojnë? Nga kujtesa, tre programe dalin rregullisht.
- XCache
- Memorizuar
- APC
APC është tani deprecated që nga PHP 5.4, kështu që unë nuk rekomandoj të provoni ta lidhni atë.
Në rastin tim, unë do të përdor XCache. Ju gjithashtu mund të gjeni postimin tim se si të instaloni XCache.
Pse ta menaxhoni vetë cache-in tuaj
Unë mund të shoh disa komente që vijnë dhe pyesin “pse? ". Ndërsa Doktrina ju lejon të përdorni me lehtësi cache-në nëpërmjet metodës së saj useResultCache (përdorim, vonesë, id). Përgjigja ime është e thjeshtë: të bëj trajtime falas.
Një shembull i vogël për t'ju dhënë disa ide. Le të themi se po ruaj një artikull nga një bazë të dhënash. Nëse e modifikoj këtë ent, cache nuk do të përditësohet derisa të dhënat të kenë skaduar. Me një menaxhim të personalizuar të cache-it, do të jem në gjendje që edhe para se cache të arrijë kohën e caktuar, të rivendos të dhënat e reja dhe të rishkruaj të vjetrat. Kjo kërkon menaxhim të konsiderueshëm, por përfitimet e performancës mund të jenë të konsiderueshme.
Symfony2 dhe si të menaxhoni cache-në tuaj
Unë ju ofroj këtë memo të vogël kodi për ta menaxhuar lehtësisht. Në rastin tonë, funksioni i këtij Gist synon të kthejë rezultatin e një pyetjeje SQL.
Prototipi: ekzekutimi i funksionit ($sql_query, $id = null, $vone = 3600);
Cilësimet:
- _sqlpyetje korrespondon me pyetjen SQL që dëshironi të ekzekutoni.
- id është identifikuesi i lidhur me të dhënat e memorizuara. Për një ID x, do të keni një përmbajtje x.
- vonesë është koha maksimale që jepni cache do të jetë e vlefshme. Si parazgjedhje, 3600 sekonda. Kjo do të thotë që pas ruajtjes së të dhënave tuaja në memorie, ato do të jenë të disponueshme për 3600 sekonda.
12345678910111213141516171819202122232425262728funksion zbatoj ($sql_query, $id = null, $vone = 3600){// Ne deklarojmë një shembull të cache$cacheDriver = i ri DoctrineCommonCacheXcacheCache();$rezultatet = null;//Nëse është futur një ID dhe sistemi i memories përmban të dhëna për një ID "x"if ($id!= null && $cacheDriver->përmban ($id)) {//Më pas marrim të dhënat e ruajtura për një ID "x"$rezultat = $cacheDriver->fetch($id);}//Nëse nuk ka të dhëna, në rast se të dhënat e ruajtura janë të barabarta me nullif ($results == null) {//Ne i marrim të dhënat$rezultatet = $ kjo-> enë-> merrni("doktrina")->getManager()->getRepository("NamespaceNameBundle:Entity")->findAll();//Nëse kemi një ID të memoriesif ($id!= null) {//Ne i ruajmë të dhënat për një ID x dhe për një vonesë y$cacheDriver->save($id, $rezultatet, intval($vonesa));}}//Ne i kthejmë rezultatet duke kufizuar kërkesat e ardhshmekthim $rezultatet;}
Epo, shpresoj që kjo memorandum t'ju ndihmojë. Shihemi së shpejti dhe faleminderit që lexuat këtë postim!