Konfiguracja cache obiektów z Redis lub Memcached
Najpierw: co potrafi twoje PHP?
Cache obiektów komunikuje się z Redisem albo Memcached, a do tego PHP potrzebuje odpowiedniego rozszerzenia. Kakapo sprawdza to w czasie działania, patrząc, czy klasa Redis wzgl. Memcached jest rzeczywiście załadowana. Sama działająca usługa Redis nie wystarczy: bez rozszerzenia PHP nie może z nią rozmawiać. Jeśli go brakuje, pozycja na liście wyboru jest wyłączona, a obok podane jest, którego pakietu brakuje (na przykład „pecl install redis” albo pakiet dystrybucyjny php<version>-redis, a potem ponowne uruchomienie PHP). Jeśli Kakapo znajdzie tylko starsze rozszerzenie „memcache” bez d, mówi o tym wyraźnie — używane ono nie jest, ponieważ brakuje mu zbiorczego zapytania getMulti i przesyłu binarnego. Jeśli nie ma żadnego z obu rozszerzeń, dalej się tu nie przejdzie; to sprawa hostingodawcy, a nie wtyczki.
Wpisz dane połączenia
Host to zwykle 127.0.0.1. Schemat taki jak „http://” jest odrzucany, bo w tym miejscu należy podać wyłącznie nazwę hosta albo adres IP. Dla gniazda uniksowego wpisuje się jego ścieżkę (np. /var/run/redis/redis.sock) i ustawia port na 0. Port to przy Redisie zwykle 6379, przy Memcached 11211; dozwolone jest 0 do 65535. Przy zmianie podłączenia Kakapo automatycznie przenosi domyślny port, o ile stary był jeszcze domyślny. Numer bazy danych (0 do 255) występuje tylko przy Redisie i oddziela tę witrynę od innych aplikacji na tym samym serwerze. Użytkownik i hasło są potrzebne tylko wtedy, gdy Redis pracuje z ACL (od Redis 6) albo Memcached wymaga SASL. Prefiks kluczy oddziela od siebie dwie instalacje WordPressa na tym samym serwerze pamięci — jeśli pole pozostanie puste, prefiks zostanie wyprowadzony z adresu witryny (kwpp plus osiem znaków). Dozwolone są litery, cyfry oraz _ . : -, najwyżej 40 znaków. Ważność pojedynczego wpisu jest wstępnie ustawiona na 86400 sekund; dozwolone jest 0 do 2592000. 0 oznacza „nigdy nie wygasa” — ma to skutki dla czyszczenia, patrz niżej.
Przetestuj połączenie, zanim cokolwiek zapiszesz
Przycisk „Przetestuj połączenie” naprawdę nawiązuje połączenie, zapisuje klucz testowy (ważność 30 sekund), odczytuje go z powrotem, porównuje go znak po znaku z zapisaną wartością i znowu go usuwa. Dopiero gdy wartość wraca niezmieniona, test uchodzi za zdany — samo „connect() nie zwróciło false” byłoby zbyt słabe: Redis może być połączony, a mimo to zabezpieczony przed zapisem (replika), a Memcached przyjmuje połączenia, zanim ma pamięć. Dla całego cyklu obowiązuje limit czasu jednej sekundy. Zmierzony czas i kilka danych serwera (wersja, zajęta pamięć, liczba wpisów, czas działania) stoją potem na karcie. Jeśli test się nie powiedzie, podany jest tam konkretny powód: nieosiągalny, logowanie odrzucone, nie da się wybrać bazy danych. Test działa wyłącznie w panelu administracyjnym albo przez cron — przy budowaniu strony dla odwiedzającego połączenie testowe nigdy nie jest nawiązywane.
Zapisz drop-in — i co się przy tym dzieje
Cache obiektów mieszka w pliku wp-content/object-cache.php. WordPress wczytuje go bardzo wcześnie, jeszcze przed każdą wtyczką. Przed zapisem Kakapo pokazuje podgląd: jaki plik zostanie utworzony, jakie dane dostępowe będą w nim stały, co potem znajdzie się na serwerze pamięci i jak wygląda droga powrotna. Jeśli coś stoi na przeszkodzie — brakujące rozszerzenie, obcy drop-in w tym miejscu, wp-content bez prawa zapisu, brakujący szablon — przycisk jest wyłączony, a powód stoi nad nim; kontrola powtarza się przy zapisie po stronie serwera. Aby potwierdzić, wpisuje się INSTALLIEREN. Zapis następuje wtedy najpierw do pliku obok, który sam PHP sprawdza pod kątem składni (o ile exec() jest dozwolone i plik binarny PHP jest osiągalny), i dopiero potem plik zostaje przemianowany na swoje miejsce i ustawiony na 0644. Powód tej okrężnej drogi: w połowie zapisany object-cache.php byłby błędem przed każdą wtyczką — witryna byłaby biała, także strona zarządzania, przez którą chciałoby się to cofnąć. Każdy zapis dostaje ponadto własną generację, żeby wpisy z czasu sprzed usunięcia nie zaczęły nagle znowu obowiązywać (inaczej wróciłaby na przykład stara nazwa bloga, a zalogowani administratorzy wylecieliby ze swojej sesji). Jeśli w tym miejscu leży już obcy drop-in, nie zostaje on ani nadpisany, ani usunięty.
Podczas pracy: odczyt liczb, czyszczenie, usuwanie
W sekcji „Bieżąca praca” stoją liczby tego jednego wywołania strony: nawiązanie połączenia w milisekundach, trafienia i chybienia, ile z nich przyszło z serwera pamięci, ile zapytań tam poszło i jak długo trwały. Statystyki w czasie świadomie nie ma — jej prowadzenie kosztowałoby przy każdym wywołaniu więcej, niż mierzy. „Wyczyść cache obiektów” zmienia sól kluczy, zamiast wysyłać FLUSHDB albo flush_all: dzięki temu żaden stary klucz nie wskazuje już na ważny wpis, a dane innych aplikacji na tym samym serwerze pozostają nietknięte. Osierocone wpisy wygasają po ustawionej ważności — jeśli stoi ona na 0, nie wygasają nigdy i zbierają się, aż Redis albo Memcached sam posprząta. Jeśli zmienisz ustawienia, dalej obowiązuje to, co stoi w pliku; Kakapo zgłasza rozbieżność i proponuje „Zaktualizuj drop-in”. „Usuń drop-in” kasuje dokładnie jeden plik, nie zostawiając wiersza w bazie danych ani harmonogramu; przy dezaktywacji wtyczki znika on tak samo. Jeśli nie chcesz mieć hasła otwartym tekstem w pliku, definiujesz je jako KWPP_OC_AUTH w wp-config.php i zostawiasz pole puste — stała ma pierwszeństwo. To samo działa dla hosta, portu, użytkownika, bazy danych i prefiksu (KWPP_OC_HOST, KWPP_OC_PORT, KWPP_OC_USER, KWPP_OC_DB, KWPP_OC_PREFIX); zmiana serwera nie wymaga wtedy ponownego zapisania drop-inu.