Symfony2: Vlastná správa vyrovnávacej pamäte
Cache je prítomná všade v počítačoch a našťastie aj inde. Bez nej by boli časy spracovania oveľa dlhšie! V čase, keď všetky frameworky hodné tohto mena používajú systém vyrovnávacej pamäte, prečo by sme mali vyrovnávaciu pamäť spravovať sami?
Sommaire
Cache v Symfony2
V Symfony2 môžete jednoducho nastaviť systém vyrovnávacej pamäte. Okrem toho, ak by sme chceli byť presní, zdá sa, že Symfony má svoj vlastný systém vyrovnávacej pamäte (app/cache/ca./), a že môžeme tiež pripojiť systém vyrovnávacej pamäte na úrovni servera (Apache, IIS, ...). Táto vyrovnávacia pamäť je plne spravovateľná a pamäť je nestála. Hneď po reštarte servera sa vyrovnávacia pamäť servera vymaže.
Systémy ukladania do vyrovnávacej pamäte
Aké systémy ukladania do vyrovnávacej pamäte existujú? Z pamäte sa pravidelne vynárajú tri programy.
- XCache
- memcached
- APC
APC je teraz zastarané od PHP 5.4, takže neodporúčam skúšať ho zapájať.
V mojom prípade použijem XCache. Môžete tiež nájsť môj príspevok o tom, ako nainštalovať XCache.
Prečo spravovať svoju vyrovnávaciu pamäť sami
Vidím, že prichádza niekoľko komentárov a pýtajú sa „prečo? ". Kým Doctrine vám umožňuje jednoducho používať vyrovnávaciu pamäť prostredníctvom svojej metódy useResultCache(použitie, oneskorenie, id). Moja odpoveď je jednoduchá: robiť bezplatné ošetrenia.
Malý príklad na predstavenie. Povedzme, že ukladám položku do vyrovnávacej pamäte z databázy. Ak túto entitu upravím, vyrovnávacia pamäť sa neaktualizuje, kým nevyprší platnosť údajov. S personalizovanou správou vyrovnávacej pamäte budem môcť ešte predtým, ako vyrovnávacia pamäť dosiahne stanovený čas, znova nastaviť nové údaje a prepísať staré. To si vyžaduje značné riadenie, ale zvýšenie výkonu môže byť značné.
Symfony2 a ako spravovať vlastnú vyrovnávaciu pamäť
Ponúkam vám tento malý poznámkový kód na jednoduchú správu. V našom prípade je cieľom funkcie tohto Gistu vrátiť výsledok SQL dotazu.
Prototyp: spustenie funkcie ($sql_query, $id = null, $delay = 3600);
Nastavenie :
- _sqldotaz zodpovedá SQL dotazu, ktorý chcete vykonať.
- id je identifikátor viazaný na údaje vo vyrovnávacej pamäti. Pre ID x budete mať obsah x.
- oneskorenie je maximálny čas, počas ktorého bude vyrovnávacia pamäť platná. Štandardne 3600 sekúnd. To znamená, že po uložení vašich údajov do vyrovnávacej pamäte budú k dispozícii 3600 sekúnd.
12345678910111213141516171819202122232425262728funkcie vykonať ($sql_query, $id = null, $delay = 3600){// Deklarujeme inštanciu cache$cacheDriver = nový DoctrineCommonCacheXcacheCache();$výsledky = null;//Ak bolo zadané ID a systém vyrovnávacej pamäte obsahuje údaje pre ID "x"if ($id!= null && $cacheDriver->contains($id)) {//Potom použijeme údaje uložené vo vyrovnávacej pamäti ako ID "x"$vysledky = $cacheDriver->fetch($id);}//Ak neexistujú žiadne údaje, v prípade, že údaje vo vyrovnávacej pamäti sú rovné nullif ($výsledky == null) {//Získavame údaje$výsledky = $ toto->container->get("doktrína")->getManager()->getRepository("NamespaceNameBundle:Entity")->findAll();//Ak máme ID medzipamäteif ($id!= null) {//Údaje uložíme pre ID x a pre oneskorenie y$cacheDriver->save($id, $results, intval($delay));}}//Vraciame výsledky obmedzením budúcich požiadavieknávrat $výsledky;}
Dúfam, že vám táto poznámka pomôže. Uvidíme sa čoskoro a ďakujem za prečítanie tohto príspevku!