Symfony2: Håndtering af cachen selv
Cachen er til stede overalt i computing og heldigvis andre steder. Uden det ville behandlingstiderne være meget længere! På et tidspunkt, hvor alle rammer, der er værdige til navnet, bruger et cache-system, hvorfor skulle vi så selv administrere cachen?
resumé
Cache i Symfony2
I Symfony2 kan du nemt opsætte et cachesystem. Desuden, hvis vi ville være præcise, ser det ud til, at Symfony har sit eget cache-system (app/cache/env/), og at vi også kan tilslutte et cachesystem på serverniveau (Apache, IIS, …). Denne cache er fuldt håndterbar, og hukommelsen er flygtig. Så snart serveren genstartes, slettes servercachen.
Caching systemer
Hvilke cachingsystemer findes der? Fra hukommelsen kommer der jævnligt tre programmer op.
- XCache
- memcached
- APC
APC er nu forældet siden PHP 5.4, så jeg anbefaler ikke at prøve at tilslutte det.
I mit tilfælde vil jeg bruge XCache. Du kan også finde mit indlæg om, hvordan du installerer XCache.
Hvorfor administrere din cache selv
Jeg kan se et par kommentarer komme ind og spørger "hvorfor? ". Mens Doctrine giver dig mulighed for nemt at bruge cachen via dens metode useResultCache(brug, forsinkelse, id). Mit svar er enkelt: at lave gratis behandlinger.
Et lille eksempel for at give dig nogle ideer. Lad os sige, at jeg cachelagrer et element fra en database. Hvis jeg ændrer denne enhed, vil cachen ikke blive opdateret, før dataene er udløbet. Med en personlig cache-styring vil jeg være i stand til, selv før cachen når den tildelte tid, at nulstille de nye data og overskrive de gamle. Dette kræver betydelig ledelse, men præstationsgevinsten kan være betydelig.
Symfony2 og hvordan du administrerer din egen cache
Jeg tilbyder dig denne lille memokode, som du nemt kan administrere. I vores tilfælde sigter funktionen af denne Gist mod at returnere resultatet af en SQL-forespørgsel.
Prototype: funktion execute ($sql_query, $id = null, $delay = 3600);
Indstillinger:
- _sqlquery svarer til den SQL-forespørgsel, du ønsker at udføre.
- id er identifikatoren bundet til de cachelagrede data. For et ID x vil du have et indhold x.
- forsinkelse er den maksimale tid, du giver cache vil være gyldig. Som standard 3600 sekunder. Det betyder, at efter caching af dine data vil de være tilgængelige i 3600 sekunder.
12345678910111213141516171819202122232425262728funktion udføre ($sql_query, $id = null, $delay = 3600){// Vi erklærer en cache-instans$cacheDriver = ny DoctrineCommonCacheXcacheCache();$resultater = null;//Hvis et ID blev indtastet og cachesystemet indeholder data for et ID "x"if ($id!= null && $cacheDriver->contains($id)) {//Så tager vi de cachelagrede data for et ID "x"$results = $cacheDriver->fetch($id);}//Hvis der ikke er nogen data, hvis de cachelagrede data er lig med nullif ($resultater == null) {//Vi henter dataene$resultater = $ dette->container->hent("doktrin")->getManager()->getRepository("NamespaceNameBundle:Entity")->findAlle();//Hvis vi har et caching-idif ($id!= null) {//Vi gemmer dataene til et ID x og for en forsinkelse y$cacheDriver->save($id, $results, interval($delay));}}//Vi returnerer resultaterne ved at begrænse fremtidige anmodningerafkast $resultater;}
Nå, jeg håber, at dette notat hjælper dig. Vi ses snart og tak fordi du læste dette indlæg!