Symfony2: Administrer cachen selv
Cachen er tilstede overalt i databehandling og heldigvis andre steder. Uten det ville behandlingstiden blitt mye lengre! I en tid der alle rammeverk som er verdig navnet bruker et hurtigbuffersystem, hvorfor skulle vi trenge å administrere hurtigbufferen selv?
sammendrag
Buffer i Symfony2
I Symfony2 kan du enkelt sette opp et hurtigbuffersystem. Dessuten, hvis vi ville være nøyaktige, ser det ut til at Symfony har sitt eget hurtigbuffersystem (app/cache/env/), og at vi også kan plugge inn et hurtigbuffersystem på servernivå (Apache, IIS, …). Denne cachen er fullt håndterbar og minnet er flyktig. Så snart serveren startes på nytt, slettes serverbufferen.
Caching systemer
Hvilke hurtigbuffersystemer finnes? Fra minnet kommer tre programmer opp jevnlig.
- XCache
- memcached
- APC
APC er nå foreldet siden PHP 5.4, så jeg anbefaler ikke å prøve å koble den til.
I mitt tilfelle vil jeg bruke XCache. Du kan også finne innlegget mitt om hvordan du installerer XCache.
Hvorfor administrere cachen din selv
Jeg kan se noen kommentarer komme inn og spørre "hvorfor? ". Mens Doctrine lar deg enkelt bruke cachen via metoden useResultCache(bruk, forsinkelse, id). Mitt svar er enkelt: å gjøre gratis behandlinger.
Et lite eksempel for å gi deg noen ideer. La oss si at jeg bufrer et element fra en database. Hvis jeg endrer denne enheten, vil ikke hurtigbufferen bli oppdatert før dataene er utløpt. Med en personlig cache-administrasjon vil jeg være i stand til å re-sette de nye dataene og overskrive de gamle før cachen når den tildelte tiden. Dette krever betydelig ledelse, men resultatgevinsten kan være betydelig.
Symfony2 og hvordan du administrerer din egen cache
Jeg tilbyr deg denne lille memokoden for å enkelt administrere. I vårt tilfelle har funksjonen til denne Gist som mål å returnere resultatet av en SQL-spørring.
Prototype: funksjon execute ($sql_query, $id = null, $delay = 3600);
Innstillinger:
- _sqlspørring tilsvarer SQL-spørringen du ønsker å kjøre.
- id er identifikatoren bundet til de hurtigbufrede dataene. For en ID x vil du ha et innhold x.
- forsinkelse er den maksimale tiden du gir cache vil være gyldig. Som standard, 3600 sekunder. Dette betyr at etter caching av dataene dine, vil de være tilgjengelige i 3600 sekunder.
12345678910111213141516171819202122232425262728funksjon henrette ($sql_query, $id = null, $forsinkelse = 3600){// Vi erklærer en cache-forekomst$cacheDriver = nytt DoctrineCommonCacheXcacheCache();$resultater = null;//Hvis en ID ble angitt og hurtigbuffersystemet inneholder data for en ID "x"if ($id!= null && $cacheDriver->contains($id)) {//Deretter tar vi de hurtigbufrede dataene for en ID "x"$results = $cacheDriver->fetch($id);}//Hvis det ikke er data, i tilfelle de hurtigbufrede dataene er lik nullif ($resultater == null) {//Vi henter dataene$resultater = $ dette->beholder->få("doktrine")->getManager()->getRepository("NamespaceNameBundle:Entity")->finnAlle();//Hvis vi har en caching-IDif ($id!= null) {//Vi lagrer dataene for en ID x og for en forsinkelse y$cacheDriver->save($id, $resultater, intervall($forsinkelse));}}//Vi returnerer resultatene ved å begrense fremtidige forespørslerretur $resultater;}
Vel, jeg håper dette notatet hjelper deg. Vi sees snart og takk for at du leser dette innlegget!