Symfony2: Samostojno upravljanje predpomnilnika
Spletna agencija » Digitalne novice » Symfony2: Samostojno upravljanje predpomnilnika

Symfony2: Samostojno upravljanje predpomnilnika

Predpomnilnik je prisoten povsod v računalništvu in na srečo tudi drugje. Brez tega bi bili časi obdelave veliko daljši! Zakaj bi morali sami upravljati predpomnilnik v času, ko vsi okviri, vredni tega imena, uporabljajo sistem predpomnilnika?

Predpomnilnik v Symfony2

V Symfony2 lahko preprosto nastavite sistem predpomnilnika. Poleg tega, če želimo biti natančni, izgleda, da ima Symfony svoj sistem predpomnilnika (app/cache/env/), in da lahko vklopimo tudi predpomnilniški sistem na ravni strežnika (Apache, IIS, …). Ta predpomnilnik je v celoti obvladljiv in pomnilnik je nestanoviten. Takoj ko se strežnik znova zažene, se predpomnilnik strežnika izbriše.

Sistemi predpomnilnika

Kateri sistemi predpomnjenja obstajajo? Po spominu se redno pojavljajo trije programi.

  • XCache
  • Spomnjeno
  • APC
    APC je zdaj zastarelo od PHP 5.4, zato ne priporočam, da ga poskusite priključiti.

V mojem primeru bom uporabil XCache. Najdete lahko tudi mojo objavo o tem, kako namestiti XCache.

Zakaj bi sami upravljali svoj predpomnilnik

Vidim nekaj komentarjev, ki prihajajo in sprašujejo »zakaj? ". Medtem ko vam Doctrine omogoča enostavno uporabo predpomnilnika prek njegove metode useResultCache(uporaba, zamuda, id). Moj odgovor je preprost: izvajati brezplačne tretmaje.

Majhen primer za nekaj idej. Recimo, da predpomnim element iz baze podatkov. Če spremenim to entiteto, predpomnilnik ne bo posodobljen, dokler podatki ne potečejo. S prilagojenim upravljanjem predpomnilnika bom lahko še preden bo predpomnilnik dosegel dodeljeni čas, ponovno nastavil nove podatke in prepisal stare. To zahteva precejšnje upravljanje, vendar je lahko povečanje učinkovitosti precejšnje.

Symfony2 in kako upravljati svoj predpomnilnik

Ponujam vam to majhno memo kodo za enostavno upravljanje. V našem primeru je namen te funkcije Gist vrniti rezultat poizvedbe SQL.

Prototip: izvedba funkcije ($sql_query, $id = null, $delay = 3600);
Nastavitve:

  1. _sqlpoizvedba ustreza poizvedbi SQL, ki jo želite izvesti.
  2. id je identifikator, vezan na predpomnjene podatke. Za ID x boste imeli vsebino x.
  3. zamuda je najdaljši čas veljavnosti predpomnilnika. Privzeto 3600 sekund. To pomeni, da bodo vaši podatki po predpomnjenju na voljo 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
    funkcija izvršiti ($sql_query, $id = null, $delay = 3600)
    {
    // Deklariramo primerek predpomnilnika
    $cacheDriver = novo DoctrineCommonCacheXcacheCache();
    $rezultati = null;
    //Če je bil vnesen ID in sistem predpomnilnika vsebuje podatke za ID "x"
    if ($id!= null && $cacheDriver->contains($id)) {
    //Nato predpomnjene podatke vzamemo za ID "x"
    $rezultati = $cacheDriver->fetch($id);
    }
    //Če ni podatkov, v primeru, da so predpomnjeni podatki enaki ničelni vrednosti
    if ($rezultati == null) {
    //Pridobivamo podatke
    $rezultati = $ to->vsebnik->dobi("doktrina")->getManager()->getRepository("NamespaceNameBundle:Entity")->findAll();
    //Če imamo ID predpomnjenja
    if ($id!= null) {
    //Podatke shranimo za ID x in za zakasnitev y
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    //Rezultate vrnemo tako, da omejimo prihodnje zahteve
    vrnitev $rezultati;
    }

No, upam, da vam bo ta beležka pomagala. Se vidimo kmalu in hvala, ker ste prebrali to objavo!

★ ★ ★ ★ ★