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ą?
streszczenie
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:
- _sqlpytanie odpowiada zapytaniu SQL, które chcesz wykonać.
- id jest identyfikatorem powiązanym z buforowanymi danymi. Dla identyfikatora x będziesz mieć treść x.
- 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.
12345678910111213141516171819202122232425262728funkcjonować wykonać ($sql_query, $id = null, $opóźnienie = 3600){// Deklarujemy instancję pamięci podręcznej$cacheDriver = Nowy 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 nullif ($wyniki == zero) {//Pobieramy dane$wyniki = $ to->kontener->pobierz("doktryna")->getManager()->getRepository(„Pakiet nazw przestrzeni nazw: jednostka”)->znajdź wszystko();//Jeśli mamy identyfikator buforowaniaif ($id!= zero) {// Zapisujemy dane dla identyfikatora x i dla opóźnienia y$cacheDriver->save($id, $results, intval($delay));}}//Zwracamy wyniki, ograniczając przyszłe żądaniapowrót $wyniki;}
Cóż, mam nadzieję, że ta notatka ci pomoże. Do zobaczenia wkrótce i dziękuję za przeczytanie tego posta!