Caching instellen in PHP met de Symfony Cache-component

Vandaag laat ik je de Symfony Cache-component zien, een eenvoudige manier om caching toe te voegen aan je PHP-applicaties. Dit helpt de algemene prestaties van uw toepassing te verbeteren door de laadtijd van de pagina te verminderen.

De Symfony Cache-component

Met de Symfony Cache-component kunt u caching instellen in uw PHP-applicaties. Het onderdeel zelf is zeer eenvoudig te installeren en configureren en stelt u in staat snel aan de slag te gaan. Ook biedt het een verscheidenheid aan adapters om uit te kiezen, zoals weergegeven in de volgende lijst:

  • database-adapter
  • bestandssysteem-adapter
  • memcached adapter
  • Redis-adapter
  • APCu-adapter
  • en meer

Als het gaat om caching met de Symfony Cache-component, zijn er een aantal termen waarmee u vertrouwd moet raken.

Om te beginnen, de cache-item verwijst naar de inhoud die is opgeslagen. Elk item wordt opgeslagen als een sleutel / waarde-paar. De cache-items worden beheerd door de cache pool, waardoor ze logisch worden gegroepeerd. In feite moet u de cache pool gebruiken om cachewaarden te manipuleren. Eindelijk is het de cache-adapter die al het zware opheffen doet om items op te slaan in de cache back-end.

In dit artikel zullen we onderzoeken hoe u de kracht van de Symfony Cache-component kunt ontketenen. Zoals gewoonlijk starten we met de installatie en configuratie, waarna we enkele praktijkvoorbeelden in de tweede helft van het artikel gaan bekijken..

Installatie en configuratie

In deze sectie gaan we de Cache-component installeren. Ik neem aan dat u Composer al in uw systeem hebt geïnstalleerd. U hebt dit nodig om de beschikbare Cache-component bij Packagist te installeren.

Nadat u Composer hebt geïnstalleerd, gaat u door en installeert u de Cache-component met behulp van de volgende opdracht.

$ composer vereist symfony / cache

Dat had een moeten creëren composer.json bestand dat er als volgt uit moet zien:

"require": "symfony / cache": "^ 4.1"

Dat is het voor de installatie, maar hoe zou u het aan uw toepassing moeten toevoegen? Het is gewoon een kwestie van het opnemen van de autoload.php bestand gemaakt door Composer in uw toepassing, zoals getoond in het volgende fragment.

Een real-world voorbeeld

In deze sectie zullen we een voorbeeld bespreken dat laat zien hoe u de Cache-component in uw toepassingen zou kunnen gebruiken om inhoud in de cache op te slaan.

Om te beginnen, laten we doorgaan en het maken index.php bestand met de volgende inhoud.

getItem (demo_string); if (! $ demoString-> isHit ()) $ demoString-> set ('Hello World!'); $ CachePool-> save ($ demoString);  if ($ cachePool-> hasItem ('demo_string')) $ demoString = $ cachePool-> getItem ('demo_string'); echo $ demoString-> get (); echo "\ n";  // verwijder alle items $ cachePool-> clear (); if (! $ cachePool-> hasItem ('demo_string')) echo "De cache-invoer demo_string is succesvol verwijderd! \ n";  // 2. opslagarraywaarden $ demoOne = $ cachePool-> getItem ('demo_array'); if (! $ demoOne-> isHit ()) $ demoOne-> set (array ("one", "two", "three")); $ CachePool-> save ($ demoOne);  if ($ cachePool-> hasItem ('demo_array')) $ demoOne = $ cachePool-> getItem ('demo_array'); var_dump ($ demoOne-> get ()); echo "\ n";  // verwijder specifiek item $ cachePool-> deleteItem ('demo_array'); if (! $ cachePool-> hasItem ('demo_array')) echo "De democode demo_array is succesvol verwijderd! \ n";  // 3. stel verloop in op items $ foo = $ cachePool-> getItem ('foo'); if (! $ foo-> isHit ()) $ foo-> set ('bar'); $ Foo-> expiresAfter (30); $ CachePool-> save ($ foo);  if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  slaap (60); if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  else echo "Cache-item is verlopen! \ n"; 

Laten we door de hoofdonderdelen van de index.php bestand om hun doel te begrijpen.

Maak de cachepool

Zoals we eerder hebben besproken, worden items in de cache opgeslagen in een cachepool. Verder wordt elke cache pool ondersteund door een specifieke cache back-end en adapter. Als u bijvoorbeeld items in de bestandssysteemcache wilt opslaan, moet u de cachepool van de bestandssysteemadapter initialiseren.

$ cachePool = new FilesystemAdapter (", 0," cache ");

U kunt drie optionele argumenten opgeven voor de FilesystemAdapter voorwerp:

  • de naamruimte waarin u cacheboekingen wilt maken 
  • een levensduur in seconden voor cache-items
  • de directory waarin de cache zal worden opgeslagen.

Stringwaarden opslaan

Omdat we de cache pool al hebben gemaakt, kunnen we deze gebruiken om cache-items op te slaan.

Ten eerste gebruiken we de getItem methode om het cache-item op te halen met de demo_string sleutel. Vervolgens gebruiken we de isHit methode om te controleren of de waarde waarnaar we op zoek zijn al in het cache-item aanwezig is $ demoString.

$ demoString = $ cachePool-> getItem ('demo_string'); if (! $ demoString-> isHit ()) $ demoString-> set ('Hello World!'); $ CachePool-> save ($ demoString); 

Omdat dit de eerste keer is dat we de demo_string cache item, de isHit methode zou moeten terugkeren vals. Vervolgens gebruiken we de reeks methode van de $ demoString object om de cachewaarde in te stellen. Ten slotte besparen we het $ demoString cache item in de $ cachePool cache pool met behulp van de opslaan methode.

Nu we het item in de cache hebben opgeslagen, kunnen we zien hoe we het in de cache kunnen ophalen.

if ($ cachePool-> hasItem ('demo_string')) $ demoString = $ cachePool-> getItem ('demo_string'); echo $ demoString-> get (); echo "\ n"; 

Hier gebruiken we de hasItem methode om het bestaan ​​van het cache-item in de cache pool te controleren voordat het wordt opgehaald. 

Laten we nu eens kijken hoe we alle cache-items uit de cachepool kunnen verwijderen:

$ CachePool-> clear ();

Arraywaarden opslaan

In het vorige gedeelte hebben we besproken hoe basiswaarden in de cache pool kunnen worden opgeslagen. Het opslaan van matrixwaarden is vrijwel hetzelfde, zoals u in het volgende voorbeeld kunt zien.

$ demoOne = $ cachePool-> getItem ('demo_array'); if (! $ demoOne-> isHit ()) $ demoOne-> set (array ("one", "two", "three")); $ CachePool-> save ($ demoOne);  if ($ cachePool-> hasItem ('demo_array')) $ demoOne = $ cachePool-> getItem ('demo_array'); var_dump ($ demoOne-> get ()); echo "\ n"; 

Zoals je ziet, kunnen we het cache-item eenvoudig instellen met een arraywaarde, precies hetzelfde als voor een string. 

Laten we vervolgens eens kijken hoe we het specifieke cache-item uit de cachepool kunnen verwijderen.

$ CachePool-> DeleteItem ( 'demo_array');

Hier gebruiken we de Verwijder item methode om de te verwijderen demo_array item uit de cache pool.

Een vervaldatum instellen voor items in de cache

Tot nu toe hebben we items in het zwembad opgeslagen zonder een vervaldatum. U wilt echter niet altijd items in de cache permanent opslaan. U wilt bijvoorbeeld cache-items regelmatig vernieuwen, dus u hebt een mechanisme nodig dat verlopen cache-items opschoont.

In deze sectie bespreken we hoe u items in de cache kunt opslaan samen met een vervaldatum.

$ foo = $ cachePool-> getItem ('foo'); if (! $ foo-> isHit ()) $ foo-> set ('bar'); $ Foo-> expiresAfter (30); $ CachePool-> save ($ foo); 

Zoals u in het bovenstaande fragment kunt zien, kunt u de expiresAfter methode om een ​​vervaldatum in te stellen voor het item in de cache. U kunt het aantal seconden doorgeven waarvoor u een item wilt cachen in het eerste argument van de expiresAfter methode.

In ons voorbeeld gebruiken we de slaap methode om te testen of het item in de cache nog steeds beschikbaar is in de cache pool.

if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  slaap (60); if ($ cachePool-> hasItem ('foo')) $ foo = $ cachePool-> getItem ('foo'); echo $ foo-> get (); echo "\ n";  else echo "Cache-item is verlopen! \ n"; 

Ga je gang en test het om te zien hoe het werkt!

Conclusie

Vandaag hebben we een korte blik op de Symfony Cache-component gelegd, waarmee u caching in uw PHP-applicaties kunt instellen. Het ondersteunt ook verschillende caching-adapters die samen de flexibiliteit bieden om het type back-end te kiezen dat u wilt gebruiken.

Voel je vrij om je gedachten en vragen te uiten met behulp van het onderstaande formulier.