Memcached czy APC, który wybrać? [Zamknięte]

161

Przeczytałem ten artykuł: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ z dawnych czasów ... Chcę uzyskać najlepszy dostępny silnik buforowania, aby moja aplikacja była naprawdę szybka. Oczywiście nie chcę przesadzać z pamięcią podręczną, ale chcę przynajmniej wybrać najlepszą dostępną opcję. W tym artykule napisano, że Memcached jest wolny, a apc jest szybki, więc dlaczego wszyscy wybierają memcached ?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels tutaj jest napisane „użyj szybkiego (ale ograniczonego), takiego jak Apc, Memcache ... i "wolny" taki jak File, Sqlite ... "Czy uważasz, że używanie Apc jako szybkiego i Memcache jako wolnego to dobry pomysł?

Thomaschaaf
źródło
14
BTW: powinieneś używać APC, nawet jeśli nie używasz apc_store. Sama pamięć podręczna kodu operacyjnego sprawia, że ​​PHP jest kilka razy szybsze.
Kornel
@porneL: co masz na myśli? Czy APC zwiększa szybkość PHP po samej instalacji, nawet jeśli nie dodam kodu do buforowania czegokolwiek w moich skryptach?
Marco Demaio
5
@Marco Demaio: Rzeczywiście. APC jest głównie optymalizatorem PHP (optymalizuje domyślnie, o ile jest włączony) i apc_store()jest tylko dodatkowym dodatkiem do tego.
Kornel
3
w 2014 r., jeśli używasz go tylko do buforowania na 1 serwerze, wybierz APCu.
Flion
Również stackoverflow.com/q/930877/632951
Pacerier,

Odpowiedzi:

268

Memcached to rozproszony system buforowania, podczas gdy APC jest nierozproszony - i jest głównie pamięcią podręczną kodu operacyjnego.

Jeśli (i tylko jeśli) masz aplikację internetową, która musi działać na różnych serwerach internetowych (równoważenie obciążenia), musisz użyć memcache do rozproszonego buforowania. Jeśli nie, po prostu trzymaj się APC i jego pamięci podręcznej.

Powinieneś zawsze używać pamięci podręcznej kodu operacji, którą jest APC (również APC zostanie zintegrowany z php6 iirc, więc dlaczego nie zacząć go używać teraz).

Możesz / powinieneś używać obu do różnych celów.

Karsten
źródło
5
Oszałamiająca odpowiedź +1. Moje pytanie brzmi: co to jest opcodepamięć podręczna?
Marco Demaio
4
@Karsten Jeśli masz różne serwery (takie jak środowisko z równoważeniem obciążenia w chmurze), o ile nie musisz utrzymywać / udostępniać stanu między nimi, APC będzie również działać dobrze jako zwykła pamięć podręczna - choć może nie tak optymalna jak każdy instancja chmury będzie musiała ogrzać własną pamięć podręczną ...
Ray,
35
opcodeCache to taki, który kompiluje zwykły kod PHP do kodu maszynowego ( „rozkazu”), a następnie zapisuje je w postaci skompilowanej dla przyszłych wniosków (aż wykryje oryginalny plik PHP się nie zmieniło). Oznacza to, że PHP nie musi uruchamiać tego kroku kompilacji przy każdym żądaniu, oszczędzając trochę czasu. To tylko jeden ze sposobów na zapewnienie szybkiego działania witryny (wśród wielu innych).
Simon East
2
Jest ciekawy pokaz slajdów, który wyjaśnia niektóre różnice między diagramami i testami
Simon East
1
Czy memechached może być używany w systemie nierozproszonym zamiast APC? Dobrze będzie zachować tylko jedną, jeśli w przyszłości będziesz mieć więcej maszyn. dobrze? Czy możesz użyć ich obu, jednego do kodu operacji, a drugiego do rozszerzalnego buforowania?
Adib Aroui,
43

Memcached, jeśli chcesz zachować stan na kilku serwerach internetowych (jeśli masz zrównoważone obciążenie i ważne jest, aby zawartość pamięci podręcznej była taka sama dla wszystkich serwerów).

APC, jeśli potrzebujesz tylko dostępu do szybkiej pamięci do odczytu (i zapisu) na (lub każdym) serwerze.

Pamiętaj, że firma APC może również skompilować i przyspieszyć czas wykonywania skryptu. Możesz więc na przykład używać APC w celu zwiększenia wydajności wykonywania, podczas gdy memcached służy do przechowywania pamięci podręcznej.

xkcd150
źródło
3
APC może również buforować pamięć podręczną ... A może?
mr_app,
7
Aktualizacja 2014: PHP 5.5 będzie natywnie zawierało Zend Optimizer Plus (który jest przeznaczony tylko dla opcache, więc nie dla pamięci podręcznej użytkownika) i wygląda na to, że APC nie będzie rozwijane poza PHP 5.4? Jednak jest teraz APCu pecl.php.net/package/APCu , który zabrał tylko części pamięci podręcznej użytkownika APC
Flion
18

Główną zaletą APC jest pamięć podręczna kodu operacji. Ponieważ PHP 5.5 zintegrowało OpCache ze swoim rdzeniem, a APC dla PHP 5.4 jest nadal oznaczane jako beta, nie jest to oficjalne ogłoszenie, ale rozwój APC zostałby przerwany w najbliższej przyszłości.

Dlatego polecam wybrać Memcached.

Hieu Vo
źródło
5
Spędziłem godziny w sieci, aby o tym pomyśleć i mam ten sam wniosek.
Nicolas Zozol,
9

Używam jednego do szybkiego, a drugiego do synchronizacji wszystkich moich serwerów. Jeśli używasz memcache, pamiętaj o otwartych portach, które będziesz musiał zablokować za pomocą iptables.

Saimon Lovell
źródło
6

Hej Thomaschaaf, mam nadzieję, że to nie jest dla ciebie zbyt późno narzędzie, ale pamiętaj, że firma APC ma pewne problemy związane z "pamięcią podręczną użytkownika". Krótko mówiąc, kiedy ustawiasz limity czasu dla wpisów pamięci podręcznej lub jeśli twój apache ulega awarii w wewnętrznym kodzie APC (na przykład przekroczeniu limitu czasu), możesz napotkać pewne problemy.

Mam tutaj wpis dotyczący problemu: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html , a także należy przeczytać http: //t3.dotgnu. info / blog / php / user-cache-timebomb.html (chyba od jednego z programistów APC)

Nir Levy
źródło
22
Natknąłem się na to i chciałem zaktualizować, że wydaje się, że został rozwiązany teraz (tak jak powinien, 2 lata później!). Oto zamknięty raport o błędzie, na przykład: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
Shane H,
1

Używam tylko APC, ponieważ APC jest pamięcią podręczną kodu i działa jak memcache! Tylko 1 plik konfiguracyjny zamiast 2.

I tylko jedno miejsce do monitorowania obu pamięci podręcznych .....

Thomas Decaux
źródło
1

To zależy od tego, co robisz, ale w przypadku moich witryn drupal działających na VPS uważam, że APC działa świetnie! Jeśli korzystasz z CentOS 6, jest on dostępny jako aktualizacja yum, więc jest prosta w instalacji i brak konfiguracji, ponieważ wartości domyślne są rozsądne. Nie do pomyślenia imho.

fred
źródło