Symfony2: Hantera cachen själv
Webbyrå » Digitala nyheter » Symfony2: Hantera cachen själv

Symfony2: Hantera cachen själv

Cachen finns överallt i datoranvändning och lyckligtvis på andra ställen. Utan det skulle handläggningstiderna bli mycket längre! I en tid när alla ramverk värda namnet använder ett cachesystem, varför skulle vi behöva hantera cachen själva?

Cache i Symfony2

I Symfony2 kan du enkelt sätta upp ett cachesystem. Dessutom, om vi ville vara exakta, ser det ut som att Symfony har sitt eget cachesystem (app/cache/env/), och att vi även kan koppla in ett cachesystem på servernivå (Apache, IIS, …). Denna cache är fullt hanterbar och minnet är flyktigt. Så snart servern startas om raderas serverns cache.

Cachingsystem

Vilka cachingsystem finns det? Från minnet kommer tre program upp regelbundet.

  • XCache
  • memcached
  • APC
    APC är nu fasats sedan PHP 5.4, så jag rekommenderar inte att du försöker koppla in den.

I mitt fall kommer jag att använda XCache. Du kan också hitta mitt inlägg om hur du installerar XCache.

Varför hantera din cache själv

Jag kan se några kommentarer komma in och frågar "varför? ". Medan Doctrine låter dig enkelt använda cachen via dess metod useResultCache(use, delay, id). Mitt svar är enkelt: att göra gratis behandlingar.

Ett litet exempel för att ge dig några idéer. Låt oss säga att jag cachelagrar ett objekt från en databas. Om jag ändrar den här entiteten kommer cachen inte att uppdateras förrän data har gått ut. Med en personlig cachehantering kommer jag att kunna återställa den nya datan och skriva över den gamla redan innan cachen når den tilldelade tiden. Detta kräver betydande förvaltning, men resultatvinsterna kan vara betydande.

Symfony2 och hur du hanterar din egen cache

Jag erbjuder dig denna lilla memokod för att enkelt hantera. I vårt fall syftar funktionen av denna Gist till att returnera resultatet av en SQL-fråga.

Prototyp: funktion kör ($sql_query, $id = null, $delay = 3600);
Inställningar :

  1. _sqlfråga motsvarar den SQL-fråga du vill köra.
  2. id är identifieraren bunden till cachad data. För ett ID x kommer du att ha ett innehåll x.
  3. fördröja är den maximala tiden du ger cache kommer att vara giltig. Som standard, 3600 sekunder. Det betyder att efter cachning av din data kommer den att vara tillgänglig i 3600 sekunder.
    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
    fungera exekvera ($sql_query, $id = null, $delay = 3600)
    {
    // Vi deklarerar en cache-instans
    $cacheDriver = ny DoctrineCommonCacheXcacheCache();
    $resultat = null;
    //Om ett ID angavs och cachesystemet innehåller data för ett ID "x"
    if ($id!= null && $cacheDriver->contains($id)) {
    //Då tar vi cachad data för ett ID "x"
    $results = $cacheDriver->fetch($id);
    }
    //Om det inte finns några data, om cachad data är lika med null
    if ($resultat == null) {
    //Vi hämtar uppgifterna
    $resultat = $ detta->behållare->få("lära")->getManager()->getRepository("NamespaceNameBundle:Entity")->findAll();
    //Om vi ​​har ett caching-ID
    if ($id!= null) {
    //Vi sparar data för ett ID x och för en fördröjning y
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    //Vi returnerar resultaten genom att begränsa framtida förfrågningar
    avkastning $resultat;
    }

Tja, jag hoppas att detta memo hjälper dig. Vi ses snart och tack för att du läser detta inlägg!

★ ★ ★ ★ ★