Symfony2: samodzielne zarządzanie pamięcią podręczną
Agencja internetowa » Wiadomości cyfrowe » Symfony2: samodzielne zarządzanie pamięcią podręczną

Symfony2: samodzielne zarządzanie pamięcią podręczną

Pamięć podręczna jest obecna wszędzie w komputerach i na szczęście gdzie indziej. Bez tego czas przetwarzania byłby znacznie dłuższy! W czasach, gdy wszystkie frameworki godne tej nazwy używają systemu pamięci podręcznej, dlaczego mielibyśmy sami zarządzać pamięcią podręczną?

Pamięć podręczna w Symfony2

W Symfony2 możesz łatwo skonfigurować system pamięci podręcznej. Poza tym, jeśli chcemy być dokładni, wygląda na to, że Symfony ma własny system pamięci podręcznej (app/cache/env/), oraz że możemy również podłączyć system pamięci podręcznej na poziomie serwera (Apache, IIS, …). Ta pamięć podręczna jest w pełni zarządzalna, a pamięć jest ulotna. Po ponownym uruchomieniu serwera pamięć podręczna serwera jest usuwana.

Systemy buforowania

Jakie istnieją systemy buforowania? Z pamięci regularnie pojawiają się trzy programy.

  • Pamięć podręczna
  • Memcached
  • APC
    APC jest teraz przestarzałe od PHP 5.4, więc nie polecam próbować go podłączyć.

W moim przypadku użyję XCache. Możesz również znaleźć mój post na temat instalacji XCache.

Po co samodzielnie zarządzać pamięcią podręczną

Widzę, że pojawia się kilka komentarzy z pytaniem „dlaczego? ". Podczas gdy Doctrine pozwala łatwo korzystać z pamięci podręcznej za pomocą swojej metody useResultCache(użycie, opóźnienie, id). Moja odpowiedź jest prosta: robić darmowe zabiegi.

Mały przykład, aby dać ci kilka pomysłów. Powiedzmy, że buforuję element z bazy danych. Jeśli zmodyfikuję tę jednostkę, pamięć podręczna nie zostanie zaktualizowana, dopóki dane nie wygasną. Dzięki spersonalizowanemu zarządzaniu pamięcią podręczną będę mógł jeszcze przed upływem wyznaczonego czasu w pamięci podręcznej zresetować nowe dane i nadpisać stare. Wymaga to znacznego zarządzania, ale wzrost wydajności może być znaczny.

Symfony2 i jak zarządzać własną pamięcią podręczną

Oferuję ci ten mały kod memo do łatwego zarządzania. W naszym przypadku funkcja tego Gista ma na celu zwrócenie wyniku zapytania SQL.

Prototyp: wykonanie funkcji ($sql_query, $id = null, $delay = 3600);
Parametry:

  1. _kwpytanie odpowiada zapytaniu SQL, które chcesz wykonać.
  2. id jest identyfikatorem powiązanym z buforowanymi danymi. Dla identyfikatora x będziesz mieć treść x.
  3. opóźnienie to maksymalny czas, przez jaki podana pamięć podręczna będzie ważna. Domyślnie 3600 sekund. Oznacza to, że po zapisaniu danych w pamięci podręcznej będą one dostępne przez 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
    funkcjonować wykonać ($sql_query, $id = null, $opóźnienie = 3600)
    {
    // Deklarujemy instancję pamięci podręcznej
    $cacheDriver = nowa DoctrineCommonCacheXcacheCache();
    $wyniki = zero;
    //Jeśli wprowadzono identyfikator, a system pamięci podręcznej zawiera dane dla identyfikatora „x”
    if ($id!= zero && $cacheDriver->zawiera($id)) {
    //Następnie bierzemy dane z pamięci podręcznej dla identyfikatora „x”
    $results = $cacheDriver->fetch($id);
    }
    //Jeśli nie ma danych, w przypadku gdy dane w pamięci podręcznej są równe null
    if ($wyniki == zero) {
    //Pobieramy dane
    $wyniki = $ to->kontener->pobierz("doktryna")->getManager()->getRepository(„Pakiet nazw przestrzeni nazw: jednostka”)->znajdź wszystko();
    //Jeśli mamy identyfikator buforowania
    if ($id!= zero) {
    // Zapisujemy dane dla identyfikatora x i dla opóźnienia y
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    //Zwracamy wyniki, ograniczając przyszłe żądania
    powrót $wyniki;
    }

Cóż, mam nadzieję, że ta notatka ci pomoże. Do zobaczenia wkrótce i dziękuję za przeczytanie tego posta!

★ ★ ★ ★ ★