Symfony2: Vlastná správa vyrovnávacej pamäte
Webová agentúra » Digitálne správy » Symfony2: Vlastná správa vyrovnávacej pamäte

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?

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 :

  1. _sqldotaz zodpovedá SQL dotazu, ktorý chcete vykonať.
  2. id je identifikátor viazaný na údaje vo vyrovnávacej pamäti. Pre ID x budete mať obsah x.
  3. 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.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    funkcie 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é null
    if ($výsledky == null) {
    //Získavame údaje
    $výsledky = $ toto->container->get("doktrína")->getManager()->getRepository("NamespaceNameBundle:Entity")->findAll();
    //Ak máme ID medzipamäte
    if ($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žiadaviek
    ná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!

★ ★ ★ ★ ★