Symfony2: Zelf de cache beheren
De cache is overal in de informatica aanwezig en gelukkig ook elders. Zonder dit zouden de verwerkingstijden veel langer zijn! Waarom zouden we, in een tijd waarin alle frameworks die naam waardig zijn, een cachesysteem gebruiken, de cache zelf moeten beheren?
overzicht
Cache in Symfony2
In Symfony2 kun je eenvoudig een cachesysteem opzetten. Trouwens, als we exact willen zijn, lijkt het erop dat Symfony zijn eigen cachesysteem heeft (app/cache/env/), en dat we ook een cachesysteem kunnen inpluggen op serverniveau (Apache, IIS, …). Deze cache is volledig beheersbaar en het geheugen is vluchtig. Zodra de server opnieuw wordt opgestart, wordt de servercache verwijderd.
Caching-systemen
Welke caching-systemen bestaan er? Uit het geheugen komen regelmatig drie programma's naar boven.
- XCache
- memcached
- APC
APC is nu deprecated sinds PHP 5.4, dus ik raad het niet aan om het in te pluggen.
In mijn geval zal ik XCache gebruiken. Je kunt ook mijn bericht vinden over het installeren van XCache.
Waarom zelf uw cache beheren?
Ik zie een paar opmerkingen binnenkomen en vragen "waarom? ". Terwijl Doctrine je in staat stelt om de cache eenvoudig te gebruiken via zijn methode useResultCache(gebruik, vertraging, id). Mijn antwoord is simpel: om gratis behandelingen te doen.
Een klein voorbeeld om je op ideeën te brengen. Stel dat ik een item uit een database cache. Als ik deze entiteit wijzig, wordt de cache pas bijgewerkt als de gegevens zijn verlopen. Met een gepersonaliseerd cachebeheer kan ik zelfs voordat de cache de toegewezen tijd bereikt, de nieuwe gegevens opnieuw instellen en de oude overschrijven. Dit vereist aanzienlijk management, maar de prestatiewinst kan aanzienlijk zijn.
Symfony2 en hoe u uw eigen cache kunt beheren
Ik bied je deze kleine memocode aan om gemakkelijk te beheren. In ons geval is de functie van deze Gist bedoeld om het resultaat van een SQL-query te retourneren.
Prototype: functie uitvoeren ($sql_query, $id = null, $delay = 3600);
instellingen:
- _sqlvraag komt overeen met de SQL-query die u wilt uitvoeren.
- id is de identifier gebonden aan de gegevens in de cache. Voor een ID x heb je een inhoud x.
- vertraging is de maximale tijd dat u cache geeft geldig zal zijn. Standaard 3600 seconden. Dit betekent dat uw gegevens na het cachen 3600 seconden beschikbaar zijn.
12345678910111213141516171819202122232425262728functie uitvoeren ($sql_query, $id = null, $delay = 3600){// We declareren een cache-instantie$cacheDriver= nieuwe DoctrineCommonCacheXcacheCache();$resultaten = nul;//Als er een ID is ingevoerd en het cachesysteem gegevens bevat voor een ID "x"if ($id!= nul && $cacheDriver->contains($id)) {// Vervolgens nemen we de gegevens in de cache voor een ID "x"$resultaten = $cacheDriver->fetch($id);}// Als er geen gegevens zijn, in het geval dat de gegevens in de cache gelijk zijn aan nullif ($resultaten == nul) {// Wij halen de gegevens op$resultaten = $ This->container->krijgen("leer")->getManager()->getRepository("NaamruimteNaamBundel:Entiteit")->Alles zoeken();//Als we een cache-ID hebbenif ($id!= nul) {//We bewaren de gegevens voor een ID x en voor een vertraging y$cacheDriver->opslaan($id, $results, intval($delay));}}//We retourneren de resultaten door toekomstige verzoeken te beperkenterugkeer $resultaten;}
Nou, ik hoop dat deze memo je helpt. Tot snel en bedankt voor het lezen van dit bericht!