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?
shrnutí
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í:
- _sqldotaz odpovídá SQL dotazu, který chcete provést.
- id je identifikátor vázaný na data uložená v mezipaměti. Pro ID x budete mít obsah x.
- 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.
12345678910111213141516171819202122232425262728funkce 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ě nullif ($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ětiif ($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!