PHP i Memcached
Instalacja
Memcached dostępny jest w repozytoriach wielu dystrybucji Linuksa, a jeżeli go brak to kompilacja nie powinna przysporzyć problemów. Zależnością jest libevent. Obsługę memcached w PHP zapewnia binarne rozszerzenie, dostępne na pecl.php.net. Kompilacja standardowa:phpize ./configure make make install
extension=memcached.so
Memcached w PHP
Oto krótki przegląd metod API (manual):- Memcache::add - Dodaje element do serwera
- Memcache::addServer - Dodaje serwer memcached do listy wykorzystywanych serwerów
- Memcache::close - Zamyka połączenie
- Memcache::decrement - Zmniejsza wartość elementu
- Memcache::delete - Usuwa element z serwera
- Memcache::flush - Usuwa wszystkie elementy z serwera
- Memcache::get - Zwraca element z serwera
- Memcache::getExtendedStats - Statystyki wszystkich serwerów memcached
- Memcache::getServerStatus - Zwraca stan serwerów memcached
- Memcache::getStats - Statystyki serwerów
- Memcache::getVersion - Zwraca wersję serwera memcached
- Memcache::increment - Inkrementuje wartość elementu
- Memcache::pconnect - Otwiera stałe połączenie
- Memcache::replace - Zmienia wartość podanego elementu
- Memcache::set - Zapisuje dane na serwerze
- Memcache::setCompressThreshold - Włącza automatyczną kompresję dużych wartości
- Memcache::setServerParams - Zmienia parametry i stan serwera
By móc korzystać z memcached musimy uruchomić lokalnie serwer memcaced. Najprostsze rozwiązanie to wykonanie w konsoli polecenia memcached w konsoli przez nieuprzywilejowanego użytkownika (nie-roota). Memcached uruchomi się z domyślnymi ustawieniami i będzie nasłuchiwał na porcie 11211.
Wykorzystanie
Oto prosty przykład wykorzystania API memcached: Co wyświetli wersję serwera memcached.Teraz już coś bardziej przydatnego - zapisywanie i pobieranie obiektów z serwera memcached: Za pomocą metody set zapisujemy na serwerze memcached prosty obiekt. Metoda set przyjmuje trzy argumenty:
bool Memcache::set ( string klucz, mixed wartość [, int flaga [, int czas_ważności]] )
Gdzie klucz - klucz pod jaką zapisana będzie wartość. flaga - określa Tak/Nie czy używać kompresji danych, a czas_ważności określa w sekundach czas przetrzymywania elementu na serwerze. Powyższy kod za pierwszym wykonaniem wyświetli tekst informujący o zapisaniu danych, lecz odświeżanie strony z kodem przed upływem 10 sekund będzie pokazywało zapisane dane. Po upływie 10 sekund element zostanie usunięty z serwerem a ponowne wykonanie skryptu zapisze nowe dane.
A teraz keszowanie wyników zapytań w Wordpressie. W pliku wp-includes/wp-db.php znajdujemy metodę: I zamieniamy na: Do wp-config.php dodajemy:
$memcache = new Memcache; $memcache->connect('localhost', 11211) or die ('Nie mogę się połączyć');
Co powinno być keszowane ?
- Wolne i zasobożerne zapytania
- Często wywoływane strony
Kiedy stosować keszowane ?
- Duża baza i dużo zapytań
- Duża strona i dużo żądań
Keszowanie żadań HTTP, stron www
Niektóre serwery, jak np. Nginx pozwalają na keszowanie całych żądań HTTP. Temat zastosowania memcached będzie jeszcze kontynuowany w odpowiednich Bibliotekach (CMS, Linux)
RkBlog