Memcached to In-Memory Cache, czyli pamięć podręczna przechowująca dane bezpośrednio w pamięci RAM serwera. Jak powszechnie wiadomo, pamięć RAM charakteryzuje się o kilka rzędów krótszym czasem dostępu do pamięci z powodu bezpośredniego (a nie sekwencyjnego) dostępu do danych. Pisałem już jak zainstalować memcached na serwerze i jak korzystać z niego w aplikacjach PHP. W tym artykule pokażę jak wykorzystać działający serwer memcached i rozszerzenie PHP w środowisku WordPress.
WordPress od bardzo wczesnych wersji posiada wbudowaną obsługę Object Cache bez konieczności aktywowania żadnych wtyczek. Aby jednak w pełni wykorzystać jego zalety i znacząco przyspieszyć WordPressa od wersji 2.5 musimy zainstalować jedną z wtyczek, która integruje mechanizm WP_Object_Cache z dostępnymi systemami Persistent Caching. Jednym z nich jest właśnie tytułowy memcached.
Memcached to serwer czyli usługa działająca na serwerze. Aby skorzystać z jego dobrodziejstw w aplikacji PHP potrzebujemy także mieć włączone rozszerzenie w środowisku PHP, w którym jest zainstalowany WordPress. Oba elementy są konieczne aby system pamięci podręcznej mógł wspierać działanie WordPressa. O ile większość hostingów WordPress posiada aktywne rozszerzenie memcached – czyli tak jakby klienta dla serwera memcached – o tyle nie wszystkie hostingi posiadają zainstalowany lokalny serwer Memcached. Istnieją wtedy trzy rozwiązania:
- zainstalować serwer memcached na aktualnym serwerze, który hostuje WordPressa,
- uruchomić osobny serwer i to na nim zainstalować serwer memcached,
- wykorzystać usługę chmurową pamięci podręcznej kompatybilną z Memcached.
Jak sprawdzić czy WordPress może skorzystać z Memcached?
Z powodu wymogów opisywanych we wstępie, przed włączeniem Memcached warto się upewnić, czy mamy dostęp do tego rozszerzenia. W artykule o debugowaniu WordPressa, pisałem o wtyczce Query Monitor, która przydawała nam się do monitorowania wydajności kodu i wtyczek WordPress. Potrafi ona też dokonać detekcji czy WordPress korzysta z Object Cache, a w przypadku kiedy system ten nie jest wykorzystywany, podpowie nam czy rozszerzenie Memcached jest dostępne na naszym serwerze. Wystarczy zainstalować wtyczkę Query Monitor i otworzyć główny panel w tzw. Kokpicie panelu administracyjnego:

Instalacja memcached
Jeżeli nasz WordPress nie wykorzystuje Object Cache, a nie ma jednocześnie informacji o dostępnym rozszerzeniu memcached to zapytaj dostawcę hostingu czy może doinstalować takie rozszerzenie oraz jak skorzystać z memcached. Możemy wtedy otrzymać adres IP i port odrębnej maszyny, która będzie nam służyć jako serwer pamięci podręcznej. Może się okazać, że aby skorzystać z memcached musimy przejść na inny plan hostingowy lub po prostu dokupić serwer jako dodatkową usługę.
Żadnego problemu nie będą mieli natomiast posiadacze serwerów VPS, ponieważ zarówno serwer jak i rozszerzenie php8-memcached można zainstalować za pomocą jednej komendy.
sudo apt-get install memcached php8-memcached
Domyślna konfiguracja memcached spokojnie wtedy wystarcza do obsługi zwykłej strony WordPress lub sklepu WooCommerce. Za pomocą komendy status możemy sprawdzić, czy serwer działa:
sudo /etc/init.d/memcached status
Aby sprawdzić czy rozszerzenie memcached działa, należy podejrzeć standardowe wyjście skryptu phpinfo:
<?php echo phpinfo();

Włączenie obsługi memcached w WordPress
Aby WordPress mógł korzystać z memcached możemy zainstalować jedną z polecanych w dokumentacji WordPressa wtyczek:
lub wybrać dowolną wtyczkę, która wyświetla się nam na słowo kluczowe memcached. Może się okazać, że już korzystasz z W3 Total Cache i nie trzeba instalować nowej wtyczki w Twoim WordPressie. Ja dla odmiany zdecyduję się na Memcached Redux, bo jest lekka i wyspecjalizowana do tego celu. Instaluję wtyczkę ale bez aktywacji. Aktywacja wtyczki spowoduje błąd o czym jesteśmy informowani w instrukcji obsługi.
Kopiuję plik:
/wp-content/plugins/memcached-redux/ object-cache.php
do lokalizacji:
/wp-content/
Podobną procedurę musimy wykonać w przypadku wtyczki Memcached Object Cache.
Od tej chwili Memcached Object Cache powinien działać. Możemy to sprawdzić w Query Monitor:

Jak widać, WordPress wykonuje mniej zapytań do bazy MySQL (zmiana z 223 na 55 to naprawdę sporo) a czas generowania strony jest radykalnie krótszy. Jak widać Cache-to-Hit ratio jest na bardzo wysokim poziomie
Alternatywy dla Memcached
Memcached to nie jedyna baza NoSQL, którą możemy wykorzystać jako warstwa Cache w środowisku WordPress. Podobną funkcję może pełnić bardzo podobny (a nawet bardziej rozbudowany) Redis. Preferuję jednak memcached ze względu na prostotę instalacji, większą kompatybilność, wielowątkową architekturę, niższe wymagania systemowe i mniejszą konsumpcję pamięci, która jest bardzo istotna w nisko kosztowych konfiguracjach VPS.
Podsumowanie
Jak widać, warto włączyć system Memcached w WordPressie. Pamięć podręczna in-memory zapewni nie tylko szybsze działanie naszej strony internetowej dla użytkowników strony (lub klientów sklepu WooCommerce) ale także skróci czas generowania front-endu podczas korzystania z panelu administracyjnego. Zwiększone user experience naszego serwisu i wygodna praca personelu będzie się wiązać z samymi korzyściami. Najlepsze jest to, że aktywacja memcached trwa kilka chwil i nie wymaga czasochłonnej konfiguracji.
Odpowiedz lub skomentuj