Web Design Blog / Programowanie:

memcached w PHP – tutorial i instalacja

Data publikacji: 22 lutego 2019

W tym przewodniku zainstalujemy, skonfigurujemy i nauczymy się wykorzystywać memcached czyli system do tworzenia pamięci podręcznej, który potrafi przechowywać obiekty w pamięci RAM serwera.

Po co wykorzystuje się memcached?

memcached (wymowa: memkesz-dii) to otwarty system do buforowania obiektów w aplikacjach internetowych. Został stworzony dla LiveJournal, szybko zdobył popularność i obecnie jest wykorzystywany przez znane i popularne serwisy między innymi Wikipedia, YouTube, Facebook, Twitter, Reddit, The New York Times i wiele więcej.

Memcached pozwala odciążyć bazę danych i system plików w aplikacjach obsługujących duży ruch. Jak większość systemów buforowania przechowuje obiekty w formie tablicy asocjacyjnej (czyli klucz-wartość). Dane pobrane z bazy mogą być przesłane do memchaced i każde kolejne identyczne żądanie (o ile nie nastąpiła modyfikacja danych) może być kierowane do niego. Dzięki temu nie łączymy się ponownie z bazą a tym samym przyspieszamy aplikację i jesteśmy w stanie obsłużyć dużo większy ruch.

Memcached możemy uruchomić na wielu serwerach dla jednej aplikacji internetowej. Techniki wykorzystywania rozproszonej i skalowalnej pamięci cache są często przytaczane w literaturze dotyczącej skalowania aplikacji internetowych.

Po co przechowywać dane w pamięci RAM?

Oczywiście czas dostępu jest o kilka rzędów wyższy. Pamięć RAM to pamięć o swobodnym dostępie do komórek pamięci, która charakteryzuje się dużo szybszym czasem odczytu niż dyski twarde (talerzowe i SSD).

Instalacja

apt-get install memcached php5-memcached

Jeżeli chcemy korzystać z lokalnego memcached z innego serwera będziemy musieli dodać jego adres IP do pliku

sudo nano /etc/memcached.conf 

edytujemy linijkę -l 127.0.0.1

W tym pliku mozna zmienić port, wielkość pliku itp. Jeżeli wszystko sobie pozmieniamy restartujemy usługę i jeżeli po sprawdzeniu statusu komendą

/etc/init.d/memcached status

mamy Active:active (running), to znaczy że wszystko jest w porządku.

Najprostszy przykład wykorzystania memcached

$m = new Memcached();
$m->addServer("127.0.0.1", 11211);

$r = $m->get("test");

if ($r){
	echo $r;
}
else{
	$m->set("test", "Witaj Świecie!") or die("Błąd, nie można stworzyć obiektu");
}

Wykorzystanie memcached w proceduralnym PHP z MySQL

$key = "user32";

$r= $mem_var->get($qshort);

if (!$r){
	require_once("dbconnect.php");
        $sql = "SELECT * FROM users WHERE user_id = 32";
	$query = mysqli_query($dbconn, $sql);					
	$r= mysqli_fetch_assoc($query);
	$m->set($key, $r) or die("Nie można stworzyć...");
}

var_dump($r);

Klasyczny przykład z PDO

$key = "user32";

$r= $m->get($key);

if (!$r) {
    require_once("dbconnect.php");
    $sql = "SELECT * FROM users WHERE user_id = :id";
    $dbo->prepare($sql);
    $stmt->bindValue(':id', 32, PDO::PARAM_INT);
    $r= $stmt->fetch(PDO::FETCH_OBJ);
    $m->set($key, serialize($r));
}
var_dump(unserialize($r));

TTL i usuwanie obiektów

Każdy system cache powinien udostępniać możliwość inwalidacji obiektów. Nic nie sto na przeszkodzie aby elementy usuwać:

$m->delete("user32");

Możemy też ustawić TTL. Wystarczy dodać parametr do metody set, na przykład:

 $m->set($key, $r, 3600)

Podsumowanie

Główną motywacją do tworzenia pamięci podręcznej w warstwie aplikacji jest oszczędność zasobów, które muszą zostać użyte aby zwrócić dany obiekt i tym samym czasu oczekiwania na odpowiedź.

Utrzymując coraz większą ilość danych i obsługując wiele połączeń użytkowników wiemy doskonale, że oczekiwanie na rezultat zapytania kierowanego do bazy danych może trwać stosunkowo długo, tym bardziej jeżeli coś zliczamy lub prowadzimy rankingi na żywo.

Buforując tego typu dane można radykalnie skrócić czas odpowiedzi. Korzystanie z memcached i innych systemów do cache’owania obiektów jest bardzo efektywne jeżeli częstotliwość potrzeby odczytywania buforowanych danych znacznie przewyższa częstotliwość ich aktualizacji.

Źródła:

https://memcached.org/


Komentarze

Brak komentarzy.

Dodaj swój komentarz