Symfony2: samostalno upravljajte predmemorijom
Web agencija » Digitalne vijesti » Symfony2: samostalno upravljajte predmemorijom

Symfony2: samostalno upravljajte predmemorijom

Predmemorija je prisutna posvuda u računalstvu, a na sreću i drugdje. Bez njega bi vrijeme obrade bilo puno dulje! U vrijeme kada svi okviri dostojni tog imena koriste sustav predmemorije, zašto bismo morali sami upravljati predmemorijom?

Predmemorija u Symfony 2

U Symfony2 možete jednostavno postaviti sustav predmemorije. Osim toga, ako želimo biti točni, izgleda da Symfony ima vlastiti sustav predmemorije (app/cache/eNV/), te da također možemo uključiti cache sustav na razini poslužitelja (Apache, IIS, …). Ova predmemorija je potpuno upravljiva, a memorija je nepostojana. Čim se poslužitelj ponovno pokrene, predmemorija poslužitelja se briše.

Sustavi predmemoriranja

Koji sustavi predmemoriranja postoje? Po sjećanju redovito se pojavljuju tri programa.

  • XCache
  • Memorirano
  • APC
    APC je sada obustavljeno od PHP 5.4, pa ne preporučujem da ga pokušate uključiti.

U mom slučaju, koristit ću XCache. Također možete pronaći moj post o tome kako instalirati XCache.

Zašto sami upravljati predmemorijom

Vidim nekoliko komentara koji dolaze i pitaju se "zašto? ". Dok vam Doctrine omogućuje jednostavno korištenje predmemorije putem njezine metode useResultCache(koristi, kašnjenje, id). Moj odgovor je jednostavan: raditi besplatne tretmane.

Mali primjer koji će vam dati neke ideje. Recimo da predmemoriram stavku iz baze podataka. Ako izmijenim ovaj entitet, predmemorija se neće ažurirati dok podaci ne isteknu. S personaliziranim upravljanjem predmemorije, moći ću ponovno postaviti nove podatke i prebrisati stare čak i prije nego što predmemorija dosegne dodijeljeno vrijeme. To zahtijeva značajno upravljanje, ali dobici u izvedbi mogu biti značajni.

Symfony2 i kako upravljati vlastitom predmemorijom

Nudim vam ovaj mali memo kod za jednostavno upravljanje. U našem slučaju, funkcija ovog Gista ima za cilj vratiti rezultat SQL upita.

Prototip: izvršavanje funkcije ($sql_query, $id = null, $delay = 3600);
Postavke:

  1. _sqlpitanje odgovara SQL upitu koji želite izvršiti.
  2. id je identifikator vezan za podatke u predmemoriji. Za ID x, imat ćete sadržaj x.
  3. odgoditi je maksimalno vrijeme koje će predmemorija biti važeća. Prema zadanim postavkama, 3600 sekundi. To znači da će vaši podaci nakon predmemoriranja biti dostupni 3600 sekundi.
    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
    funkcija izvršiti ($sql_query, $id = null, $delay = 3600)
    {
    // Deklariramo instancu predmemorije
    $cacheDriver = novi DoctrineCommonCacheXcacheCache();
    $rezultati = nula;
    //Ako je ID unesen i sustav predmemorije sadrži podatke za ID "x"
    if ($id!= nula && $cacheDriver->contains($id)) {
    //Tada uzimamo predmemorirane podatke za ID "x"
    $rezultati = $cacheDriver->fetch($id);
    }
    //Ako nema podataka, u slučaju da su predmemorirani podaci jednaki nuli
    if ($rezultati == nula) {
    //Dohvaćamo podatke
    $rezultati = $ ta->kontejner->get("doktrina")->getManager()->getRepository("NamespaceNameBundle:Entity")->nađiSve();
    //Ako imamo ID predmemoriranja
    if ($id!= nula) {
    //Podatke spremamo za ID x i za odgodu y
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    //Vraćamo rezultate ograničavanjem budućih zahtjeva
    povratak $rezultati;
    }

Pa, nadam se da će vam ovaj dopis pomoći. Vidimo se uskoro i hvala vam što čitate ovaj post!

★ ★ ★ ★ ★