PHP: memcache czy memcached?

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:

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:

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.