Kiedy powinienem używać Memcache zamiast Memcached?

Wydaje się, że PHP posiada dwie biblioteki memcached o nazwach memcache i memcached . Jaka jest różnica i skąd wiesz, którego użyć? Czy jeden jest przestarzały? Wydaje się, że memcached oferuje więcej metod, więc zakładam, że oznacza to, że miał najwięcej rozwoju - ale wydaje się również wymagać zewnętrznych bibliotek C / C++ , więc nie jestem pewien, czy mogę go zainstalować.

Wydaje się, że memcache istnieje już dłużej, nie wymaga dodatkowych bibliotek i ma wstępnie skompilowane binaria nawet dla windows! Myślę, że na razie byłby to lepszy wybór. Jednak jako nowy na memcached (serwer) nie jestem pewien, czy istnieją jakieś super ważne funkcje w memcached (php), które sprawiają, że warto dodatkowy kłopot.

 313
Author: Shog9, 2009-09-18

4 answers

Biblioteka Memcached client została niedawno wydana jako stabilna. Jest on używany przez digg ( został opracowany dla digg przez Andrei Zmievski, teraz już nie z digg) i implementuje znacznie więcej protokołu memcached niż starszy klient memcache. Najważniejsze cechy Memcached to:

  1. Cas tokeny . To znacznie ułatwiło mi życie i jest łatwym systemem zapobiegawczym dla nieświeżych danych. Za każdym razem, gdy wyciągasz coś z pamięci podręcznej, może otrzymać z nim token cas (podwójny numer). Możesz użyć tego tokena do zapisania zaktualizowanego obiektu. Jeśli nikt inny nie zaktualizował wartości podczas uruchamiania wątku, wymiana zakończy się sukcesem. W przeciwnym razie został utworzony nowszy token cas i jesteś zmuszony do ponownego załadowania danych i zapisania ich ponownie za pomocą nowego tokena.
  2. przeczytaj rozmowy zwrotne są najlepszą rzeczą od czasu krojonego chleba. To uprościło wiele mojego kodu.
  3. getDelayed () jest miłą funkcją, która może skróć czas oczekiwania skryptu na powrót wyników z serwera.
  4. chociaż serwer memcached ma być bardzo stabilny, nie jest najszybszy. Możesz użyć protokołu binarnego zamiast ASCII z nowszym klientem.
  5. za każdym razem, gdy zapisujesz złożone dane do memcached, klient zawsze robił serializację wartości (która jest powolna), ale teraz z memcached client masz możliwość użycia igbinary . Do tej pory nie miałem okazji przetestować jak duży może to być zysk z wydajności.

Wszystkie te punkty wystarczyły mi do przejścia na najnowszego klienta i mogę powiedzieć, że działa jak urok. Istnieje zewnętrzna zależność od biblioteki libmemcached, ale udało się zainstalować ją jednak na Ubuntu i Mac OSX, więc nie ma żadnych problemów na razie.

Jeśli zdecydujesz się na aktualizację do nowszej biblioteki, sugeruję aktualizację do najnowszej wersji serwera, a także ma kilka fajnych funkcji. Będziesz musiał zainstalować libevent , aby go skompilować, ale na Ubuntu nie było to zbyt kłopotliwe.

Do tej pory nie widziałem żadnych frameworków odbierających nowego klienta memcached( chociaż nie śledzę ich), ale zakładam, że Zend wkrótce się pojawi.

UPDATE

Zend Framework 2 ma adapter Do Memcached, który można znaleźć tutaj

 243
Author: Miha Hribar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-11 09:15:51

To jest rok 2013. Zapomnij o komentarzach z 2009 roku. Podobnie, jeśli uruchamiasz poważne obciążenia ruchu, nawet nie zastanawiać się, jak zrobić z memcache systemu windows. Gdy mamy do czynienia z bardzo dużą skalą (500 + front end web servers) I 20 + back end database servers and replicants (mysql & mssql mix), farma serwerów memcached (12 serwerów w grupie) obsługuje wiele aplikacji OLTP o dużej objętości odpowiadając 25k ~ 40K mc->Pobierz połączenia na sekundę. Te telefony to te, które NIE muszą dotrzeć do bazy danych.

IMHO, to użycie memcached zapewniło poważne $$$, $$$oszczędności na CAPEX dla nowych serwerów DB i licencji, a także na umowach wsparcia dla dużych komercyjnych projektów.

 11
Author: Mike Trest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-20 15:19:25

Podczas korzystania z systemu Windows porównanie jest skrócone: memcache wydaje się być jedynym dostępnym klientem.

 10
Author: rymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-04 11:25:21

Memcached jest nowszym API, zapewnia również memcached jako dostawcę sesji, który może być świetny, jeśli masz farmę serwerów.

Po wersji jest nadal naprawdę niska 0.2 ale używałem obu i nie napotkałem większego problemu, więc chciałbym przejść do memcached, ponieważ jest nowy.

 7
Author: RageZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-04 11:25:09