Symfony2: Vlastní správa mezipaměti
Webová agentura » Digitální zprávy » Symfony2: Vlastní správa mezipaměti

Symfony2: Vlastní správa mezipaměti

Cache je přítomna všude ve výpočetní technice a naštěstí i jinde. Bez něj by byly doby zpracování mnohem delší! Proč bychom v době, kdy všechny frameworky hodné toho jména používají systém mezipaměti, museli spravovat mezipaměť sami?

Cache v Symfony2

V Symfony2 můžete snadno nastavit systém mezipaměti. Kromě toho, pokud bychom chtěli být přesní, vypadá to, že Symfony má svůj vlastní systém mezipaměti (app/cache/env/), a že můžeme také připojit systém cache na úrovni serveru (Apache, IIS, …). Tato mezipaměť je plně spravovatelná a paměť je volatilní. Jakmile je server restartován, cache serveru je smazána.

Systémy ukládání do mezipaměti

Jaké systémy mezipaměti existují? Z paměti se pravidelně objevují tři programy.

  • XCache
  • Zapamatováno
  • APC
    APC je nyní zastaralé od PHP 5.4, takže nedoporučuji zkoušet jej zapojovat.

V mém případě použiji XCache. Můžete také najít můj příspěvek o tom, jak nainstalovat XCache.

Proč si spravovat mezipaměť sami

Vidím, že přichází několik komentářů a ptají se: „Proč? ". Zatímco Doctrine umožňuje snadno používat cache prostřednictvím své metody useResultCache(použití, zpoždění, id). Moje odpověď je jednoduchá: provádět bezplatné ošetření.

Malý příklad, abyste měli nějaké nápady. Řekněme, že ukládám položku do mezipaměti z databáze. Pokud tuto entitu upravím, mezipaměť nebude aktualizována, dokud nevyprší platnost dat. Díky personalizované správě mezipaměti budu moci ještě předtím, než mezipaměť dosáhne stanoveného času, znovu nastavit nová data a přepsat stará. To vyžaduje značné řízení, ale zvýšení výkonu může být značné.

Symfony2 a jak spravovat vlastní mezipaměť

Nabízím vám tento malý poznámkový kód pro snadnou správu. V našem případě má funkce tohoto Gistu za cíl vrátit výsledek SQL dotazu.

Prototyp: funkce vykonat ($sql_query, $id = null, $delay = 3600);
Nastavení:

  1. _sqldotaz odpovídá SQL dotazu, který chcete provést.
  2. id je identifikátor vázaný na data uložená v mezipaměti. Pro ID x budete mít obsah x.
  3. zpoždění je maximální doba, po kterou bude mezipaměť platná. Ve výchozím nastavení 3600 sekund. To znamená, že po uložení do mezipaměti budou vaše data k dispozici po dobu 3600 sekund.
    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
    funkce vykonat ($sql_query, $id = null, $delay = 3600)
    {
    // Deklarujeme instanci mezipaměti
    $cacheDriver = nový DoctrineCommonCacheXcacheCache();
    $výsledky = null;
    //Pokud bylo zadáno ID a systém mezipaměti obsahuje data pro ID "x"
    if ($id!= null && $cacheDriver->contains($id)) {
    //Potom vezmeme data z mezipaměti pro ID "x"
    $results = $cacheDriver->fetch($id);
    }
    //Pokud nejsou k dispozici žádná data, v případě, že jsou data uložená v mezipaměti rovna hodnotě null
    if ($results == null) {
    //Načítáme data
    $výsledky = $ to->kontejner->get("doktrína")->getManager()->getRepository("NamespaceNameBundle:Entity")->najítVše();
    //Pokud máme ID mezipaměti
    if ($id!= null) {
    //Uložíme data pro ID x a pro zpoždění y
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    //Vrátíme výsledky omezením budoucích požadavků
    zpáteční $výsledky;
    }

Doufám, že vám tato poznámka pomůže. Brzy se uvidíme a děkuji za přečtení tohoto příspěvku!

★ ★ ★ ★ ★