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.
Zalety Memcached
- łatwy w użytkowaniu,
- obsługuje wiele języków programowania
- wielowątkowa architektura,
- skalowalność,
- natywna integracja z MySQL,
- duża popularność
Wady Memcached
- nie obsługuje transakcji,
- nie obsługuje złożonych struktur danych,
- brak trwałości – danych nie można zapisać na dysku.
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($key);
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.
Odpowiedz lub skomentuj