Zacznijmy od tego czym jest memcache(d). Jest to bardzo wydajny i skalowalny system pamięci podręcznej opartej wyłącznie o pamięć RAM.
Sądziłem, że rozróżnienie pomiędzy memcache i memcached nie jest problemem wśród programistów PHP. Ale Mariusz Gil podczas swojej prezentacji na PHPCon Poland zwrócił na to szczególną uwagę.
Spojrzałem w wyrocznię dzisiejszego świata – Google, zadając pytanie o: php memcached session.
W większości strony z pierwszej strony wyników miały hasło memcached w tytule. Pomyślałem ekstra, Mariusz przesadził…
Ale spojrzałem w treść tych artykułów. Wszędzie kazano instalować memcache. Straszne.
Jaka jest różnica?
Memcache jest już leciwą biblioteką, która powstała w 2004 roku (ostatnia wersja z 27-02-2009).
Natomiast aktualna stabilna wersja memcached jest z 03-05-2010, a sama biblioteka powstała na początku 2009 roku (porównajcie to z ost. wersją memcache).
Dodatkowo memcached posiada kilka ciekawych rozwiązań. Posłużę się porównaniem Mariusza:
memcache | memcached | |
Data pierwszego wydania | 2004-06-08 | 2009-01-29 |
Zależności zewnętrzne | – | libmemcached |
Plecenia APPEND/PREPEND | – | TAK |
Automatyczna serializacja | TAK | TAK |
Protokół binarny | – | opcjonalnie |
Polecenie CAS | – | TAK |
Kompresja | TAK | TAK |
Constistent hasing | TAK | TAK |
Opóźnione pobieranie danych | – | TAK |
Polecenie multi-GET | TAK | TAK |
Support sesji | TAK | TAK |
Polecenia GET/SET na wskazanym serwerze | – | TAK |
Przechowywanie danych liczbowych | konwersja | TAK |
Automatyczne naprawianie kluczy | TAK | TAK |
Zarządzanie timeout-ami | tylko połączenie | TAK |
Znacie już odpowiedź?
Który system do przechowywania danych w pamięci jest lepszy?
Memcached!
Instalacja
Aby móc skorzystać z memcached w PHP potrzebujemy zainstalowanego demona memcached (w wielu dystrybucjach jest w paczkach).
Gdy już to mamy zostaje nam skompilowanie rozszerzenia dla PHP:
1 |
pecl install memcached |
Pamiętajmy o zależności od libmemcached. Większość użytkowników memcached korzysta z niego w głównej mierze jako session handler. Jeśli wszystko mamy na 1 maszynie w php.ini wystarczy podmienić 2 linijki na:
1 2 |
session.save_handler = memcached session.save_path = "127.0.0.1:11211" |
Od tego momentu nasze sesje będą przetrzymywane w pamięci RAM. To rozwiązanie ma jeden minus – ulotność.
Na co dzień memcached służy jako miejsce do składowania danych, np. pobranych z bazy danych.