Symfony2: Gestionați singur memoria cache
Agenție web » Știri digitale » Symfony2: Gestionați singur memoria cache

Symfony2: Gestionați singur memoria cache

Cache-ul este prezent peste tot în computer și, din fericire, în altă parte. Fără el, timpul de procesare ar fi mult mai lung! Într-un moment în care toate cadrele demne de acest nume folosesc un sistem cache, de ce ar trebui să gestionăm singuri cache-ul?

Cache în Symfony2

În Symfony2, puteți configura cu ușurință un sistem cache. În plus, dacă vrem să fim exact, se pare că Symfony are propriul său sistem de cache (app/cache/env/), și că putem conecta și un sistem cache la nivel de server (Apache, IIS, …). Acest cache este complet gestionabil, iar memoria este volatilă. De îndată ce serverul este repornit, memoria cache a serverului este ștearsă.

Sisteme de stocare în cache

Ce sisteme de stocare în cache există? Din memorie, trei programe apar în mod regulat.

  • XCache
  • memcached
  • APC
    APC este acum depreciată începând cu PHP 5.4, așa că nu recomand să încercați să-l conectați.

În cazul meu, voi folosi XCache. Puteți găsi, de asemenea, postarea mea despre cum să instalați XCache.

De ce să vă gestionați singur memoria cache

Văd câteva comentarii care vin și mă întreb „de ce? ". În timp ce Doctrine vă permite să utilizați cu ușurință memoria cache prin metoda sa useResultCache (utilizare, întârziere, id). Raspunsul meu este simplu: sa faci tratamente gratuite.

Un mic exemplu pentru a vă oferi câteva idei. Să presupunem că memorez în cache un articol dintr-o bază de date. Dacă modific această entitate, memoria cache nu va fi actualizată până când datele nu vor expira. Cu o gestionare personalizată a cache-ului, voi putea chiar înainte ca cache-ul să atingă timpul alocat să resetez noile date și să le suprascriu pe cele vechi. Acest lucru necesită un management semnificativ, dar câștigurile de performanță pot fi substanțiale.

Symfony2 și cum să vă gestionați propriul cache

Vă ofer acest mic cod memo pe care să îl gestionați cu ușurință. În cazul nostru, funcția acestui Gist își propune să returneze rezultatul unei interogări SQL.

Prototip: function execute ($sql_query, $id = null, $delay = 3600);
setări:

  1. _sqlîntrebare corespunde interogării SQL pe care doriți să o executați.
  2. id este identificatorul legat de datele din cache. Pentru un ID x, veți avea un conținut x.
  3. întârziere este timpul maxim pe care îl oferiți cache-ul va fi valabil. Implicit, 3600 de secunde. Aceasta înseamnă că, după memorarea în cache a datelor, acestea vor fi disponibile timp de 3600 de secunde.
    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
    funcţie a executa ($sql_query, $id = nul, $delay = 3600)
    {
    // Declarăm o instanță cache
    $cacheDriver = nou DoctrineCommonCacheXcacheCache();
    $rezultate = zero;
    //Dacă a fost introdus un ID și sistemul de cache conține date pentru un ID „x”
    if ($id!= zero && $cacheDriver->contine($id)) {
    //Apoi luăm datele din cache pentru un ID „x”
    $rezultate = $cacheDriver->fetch($id);
    }
    //Dacă nu există date, în cazul în care datele din cache sunt egale cu nul
    if ($rezultate == zero) {
    //Preluăm datele
    $rezultate = $ asta->container->get("doctrină")->getManager()->getRepository(„NamspaceNameBundle:Entity”)->findAll();
    //Dacă avem un ID de cache
    if ($id!= zero) {
    //Salvăm datele pentru un ID x și pentru o întârziere y
    $cacheDriver->salvare($id, $rezultate, intval($delay));
    }
    }
    //Returnăm rezultatele limitând solicitările viitoare
    reveni $rezultate;
    }

Ei bine, sper că această notă te va ajuta. Ne vedem curând și vă mulțumesc că ați citit această postare!

★ ★ ★ ★ ★