Redis – Działanie i konfiguracja

Serwer Redis to technologia typu in-memory, która umożliwia przechowywanie danych w formacie klucz-wartość (np. ciągi znaków, listy, obiektów czy struktury danych) bezpośrednio w pamięci operacyjnej (RAM). Dzięki temu znacznie skraca czas dostępu do często używanych danych oraz zmniejsza liczbę operacji na bazie danych. Więcej na temat zasad działania Object cache Redis można przeczytać w artykule: Objact Cache Redis dla WordPress

W tym poradniku zostaną omówione:

  1. Wymagania: pakiety, rozszerzenia, dane do konfiguracji
  2. Sprawdzenie połączenia z serwerem Redis
  3. Połączenie, konfiguracja dla CMS WordPress
  4. Połączenie, konfiguracja dla PrestaShop
  5. Fast fix – Błędy i rozwiązania
  6. Dobre praktyki na przyszłość
  7. FAQ – pytania i odpowiedzi

Korzyści ze stosowania serwera Redis:

  • Skrócenie czasu ładowania stron — dane są agregowane i ptrzetrzymywane w pamięci RAM.
  • Zmniejszenie ilości zapytań SQL — mniejsza ilość zapytań pomoże w odciążeniu zasobów serwera.
  • Obniżenie zużycia zasobów serwera — poprawa stabilności działania strony i usługi w zależności od rodzaju i efektów optymalizacji.

1. Wymagania, dane i nawiązywanie połączenia

1.1. Pakiety z usługą Redis

Usługa serwer Redis jest dostępna wyłącznie dla pakietów:

  • WordPress
  • WooCommerce 
  • PrestaShop

Pozostałe pakiety w tym pakiety Cyber_, VPS, Serwery Dedykowane nie mają opcji uruchomienia serwera Redis. Dla serwerów VPS oraz Dedykowanych jest opcja uruchomienia Memcached na życzenie klienta. Nie ma też możliwości połączenia się z serwerem Redis z zewnętrznych usług niebędących w obrębie naszej sieci.

1.2. Aktywne rozszerzenie PHP redis

Do poprawnego połączenia się z serwerem Redis wymagane jest też aktywne rozszerzenie Redis w odpowiedniej wersji PHP dla domeny. Rozszerzenia PHP można sprawdzić w zakładce PHP – Ustawienia Globalne/ Rozszerzenia po wybraniu odpowiedniej dla domeny wersji PHP.

1.3. Dane konfiguracyjne

Po dokonaniu zakupu odpowiedniego pakietu konfiguracja Redis znajdować się będzie w panelu Direct Admin Ustawienia Redis. Z poziomu Ustawień otrzymujemy takie dane jak:

  1. Port — unikatowy port użytkownika 
  2. Host — nazwa serwera Redis do którego nastąpi połączenie
  3. Użytkownik  — użytkownik Redis, często już nie wymagany w podawaniu podczas konfiguracji połączenia.
  4. Limit pamięci — domyślna wartość 128 MB
  5. Limit połączeń 10 000
  6. Hasło — widoczne po kliknięciu, konieczne do połączenia

1.4. Czyszczenie pamięci z poziomu Direct Admin

Jeżeli chcemy wyczyścić całą pamięć Redis, należy skorzystać z opcji Ustawienia Redis/ Dodatkowe funkcje/ wyczyść pamięć podręczną.

1.5. Sprawdzenie połączenia z serwerem

Jeżeli mamy wątpliwości, czy dane konfiguracyjne są prawidłowe oraz, czy serwer Redis poprawnie odpowiada, możemy sprawdzić działanie usługi za pomocą 2 poleceń SSH. Nazwa serwera Redis redis3.cyber-folks.pl jest przykładowa (sprawdź w Ustawieniach Redis właściwy serwer dla swojej usługi, numeracja od 1-4).

1. Sprawdzenie połączenia za pomocą polecenia telnet

  1. Zaloguj się poprzez SSH na konto użytkownika (Dane do logowania jak do Direct Admin)
    ssh username@hostname -p [port]
  2. Wpisz polecenie celem sprawdzenia połączenia
    telnet redis3.cyber-folks.pl [port]
  3. Poprawne połączenie:
    Trying 192.168.69.123...
    Connected to redis3.cyber-folks.pl
  4. Brak połączenia:
    Trying 192.168.69.123...
    telnet: connect to address 192.168.69.123: Connection refused

2. Sprawdzenie połączenia za pomocą polecenia redis-cli PING

  1. Zaloguj się poprzez SSH na konto użytkownika (Dane do logowania jak do Direct Admin)
    ssh username@hostname -p [port]
  2. Wpisz polecenie do połączenia z serwerem
    redis-cli -h redis3.cyber-folks.pl -p [port]
  3. Podaj hasło wpisując najpierw polecenie auth [password]
    redis3.cyber-folks.pl:[port]:> auth [password]
  4. Poprawne połączenie:
    OK
    redis3.cyber-folks.pl:[port]> PING
    PONG
    redis3.cyber-folks.pl:[port]>
  5. Brak połączenia:
    Could not connect to Redis redis3.cyber-folks.pl:[port]: Connection refused

2. Konfiguracja pluginów, zarządzanie, czyszczenie pamięci

Do nawiązania połączenia strony z serwerem Redis będzie potrzebny odpowiedni skrypt lub plugin dla wybranego systemu CMS. Poniżej przestawione zostanie kilka przykładowych konfiguracji.

2.1. Konfiguracja dla WordPress (LS Cache)

Konfiguracja
LS Cache to najczęściej wybierany plugin do obsługi cache dla serwerów opartych o LSWS. Posiada on dodatkową opcję rozszerzenia ustawień cache również do zarządzania Objact Cache Redis. Aby aktywować Redis należy kolejno:

  1. Z poziomu Kokpitu WordPress przejdź do zakładki LS Cache / Cache
  2. Wybierz zakładkę Object cache
  3. Wybierz opcję Redis (między Redis a Memcached)
  4. Kolejno uzupełnij: Port, Host Hasło. 
  5. W nowych wersjach Ls Cache pomija się podanie użytkownika – pole użytkownik pozostawiamy puste. 
  6. Zapisz dane i sprawdź połączenie. 
  7. Jeżeli nie nawiązano połączenia sprawdź poprzednio opisane wymagania i połączenie bezpośrednie do serwera.

Czyszczenie pamięci
Pamięć Redis można wyczyści za pomocą opcji Narzędzia/ Wyczyść wszystko Pamięć podręczna obiektów. Konfiguracji danych do połaczenia możemy też dokonać za pomocą poleceń WP-CLI z poziomu SSH:

wp cache flush
lub
wp litespeed-purge object

2.2. Konfiguracja dla WordPress (Objact Cache Redis)

Konfiguracja
Drugi pod względem popularności plugin do obsługi Objact Cache Redis. Skupia się jedynie na obsłudze tej technologii bez dodatkowych opcji cache. Konfiguracja połączenia odpbywa się z poziomu pliku wp-config.php:

1. Edycja wp-config.php — Przejdź to katalogu głównego domeny za pomocą Managera plików/ domains/ nazwa domeny/ public_html i wybierz opcję Edytuj dla pliku wp-config.php (edycją można przeprowadzić za pomocą użytkownika FTP).

2. Dane do połączenia — Podczas edycji, najlepiej przed sekcją /* That’s all, stop editing! Happy publishing. */ dodajemy odpowiednią definicję konfiguracji połączenia do serwera Redis.

// adjust Redis host and port if necessary 
define( 'WP_REDIS_HOST', 'redis3.cyber-folks.pl' );
define( 'WP_REDIS_PORT', 'port' );
define( 'WP_REDIS_PASSWORD', 'password' );

Konfiguracji danych do połaczenia możemy też dokonać za pomocą poleceń WP-CLI z poziomu SSH:

# Next, enable the drop-in:
wp redis enable

# Check the connection:
wp redis status

# Configure the plugin
wp config set WP_REDIS_HOST "redis3.cyber-folks.pl"
wp config set WP_REDIS_PORT "port"
wp config set WP_REDIS_PASSWORD "password"

3. Waryfikacja połączenia w pluginie — Po podaniu poprawnych danych w pliku wp-config.php  i aktywowaniu cache pojawi się podsumowanie z prawidłowym połączeniem do serwera:

Czyszczenie pamięci
Pamięc można wyczyścić z poziomu Pluginu za pomocą opcji Flush Cache lub z poziomu SSH przez polecenie WP-CLI:

wp cache flush
lub
wp redis cache flush

Dodarkowe opcje

Redis prefix — Dla zachowania optymalizacji przechowywania danych wielu aplikacji, w tym uniknięciu kolizji danych, czyszczeniu cache oraz debugowaniu zaleca się tworzenie odrębnych prefixów w bazie danych.
Redis database — Umożliwia zdefiniowanie numeru bazy danych do przechowywania informacji, co pozwalało na separację danych poszczególnych baz dla wskazanych aplikacji. Zalecane jest jednak korzystanie z opcji prefixów niż oddzielnych baz. Wartość pozostawiamy na 0.

MAX TTL — Umożliwia zdefiniowanie maksymalnego czasu przechowywania obiektów w pamięci Redis. Brak tej definicji spowoduje, że zostaną przyjęte domyślne wartości systemu. Dłuższy czas przechowywania obiektów w pamięci może powodować jej zbytni przyrost i spadki wydajności. Domyślna sugerowana wartość przez dostawcę pluginu to 3600s (1h):

// change the prefix and database for each site to avoid cache data collisions
define( 'WP_REDIS_PREFIX', 'prefix_name' );
define( 'WP_REDIS_DATABASE', 0 ); // 0-15
define( 'WP_REDIS_MAXTTL', 3600 ); 

Konfiguracja ustawień za pomocą WP-CLI:

# Configure the plugin
wp config set WP_REDIS_PREFIX "prefix"
wp config set WP_REDIS_DATABASE "15"
wp config set WP_REDIS_MAXTTL' "3600"

2.3. Konfiguracja dla Prestahop (Redis Cache by PrestashopHero)

Konfiguracja
Niestety w przypadku Prestashop większość rozwiązań do połączenia i zarządzania serwerem Redis jest płatna. Poniżej przedstawimy konfiguracje dla jednego z  nielicznych rozwiązań darmowych od dostawcy PrestashopHero.

  1. Przejdź na stronę producenta i pobierz bezpłatnie dwie paczki zip (wymagana będzie bezpłatna rejestracja w systemie).
  2. Pobierz Plugin Objact Cache Redis.
  3. Przejdź do zakładki Modules i  zainstaluj dwa pobrane archiwa zip (plugin i hub).
  4. Aktywuj nowo dodane moduły. 
  5. Przejdź do zakładki Wydajność i aktywuj na dole opcję Cache/ Redis.
  6. Podaj kolejno host, port i hasło. 
  7. Sprawdź połączenie do serwera Redis.

Czyszczenie pamięci
Pamięć Redis czyścimy opcją Flush cache Redis z poziomu modułu Wydajność/ Redis.

Dodatkowe opcje
Databe number (Numer bazy)
Lifetime (czas życia obiektów, w dniach)

3. Fast Fix (Błędy i rozwiązania)

3.1. Brak połączenia do serwera Redis z poziomu SSH

Jeżeli podczas korzystania z poleceń telnet lub redis-cli do połączenia się z serwerem otrzymujemy informacje Connection refused, skontaktuj się ze wsparciem technicznym. Występuje prawdopodobieństwo, że użytkownik redis nie został poprawnie stworzony na serwerze lub występują problemy z konfiguracją użytkownika. Kroki jakie należy podjąć celem weryfikacji połączenia opisano w sekcji: 3. Połączenie, konfiguracja, czyszczenie pamięci.

3.2. Brak połączenia do serwera Redis z poziomu aplikacji

Jeżeli połączenie z poziomu SSH zostało nawiązane poprawnie, problem może leżeć po stronie braku aktywnego rozszerzenia PHP lub błędnej konfiguracji w aplikacji.

Weryfikacja:

  1. Z poziomu Direct Admin przejdź do zakładki PHP – Globalne ustawienia.
  2. W zakładkę rozszerzenia wybierz wersję PHP domeny, dla której konfigurujesz połączenie Redis.
  3. Włącz rozszerzenie redis (o ile było nieaktywne) i ponów połączenie.
  4. Jeżeli dalej nie można nawiązać połączenia sprawdź dane do uwierzytelnienia: host, port i hasło. Nie podawaj nazwy użytkownika (jest ona zbędna dla nowszych wersji pluginów). 
  5. Jeżeli dalej nie można nawiązać połączenia, zainstaluj ponownie, zaktualizuj lub użyj innego pluginu do połączenia z Redis.

3.3. Błędne wczytywanie zasobów z pamięci Redis

Jeżeli z jakichś przyczyn wystąpią problemy z odpowiednim odczytaniem zasobów, lub konflikty między odczytywaną zawartością można podjąć następujące kroki. 

Weryfikacja:

  1. Wyczyścić pamięć Redis (dowolną metodą).
  2. Zmienić prefix bazy dla dla wskazanej aplikacji. 
  3. Wykluczyć z cache błędnie problematyczne zapytania/ grupy.

3.4. Przekroczenie limitu pamięci

Pamięć Redis powinna być dynamicznie zwalniania w momencie przepełnienia. Jeżeli z jakiejś przyczyn dalej występują problemy z alokacją pamięci i przepełnia się ona zbyt szybko.

Weryfikacja:

  1. Jakie zapytania generują tak szybkie przepełnienia się pamięci.
  2. Można zmniejszyć czas życia obiektów w pamięci. 
  3. Można spróbować wykluczyć niektóre zbędne zapytania/ grupy o dużej zmienności. 
  4. W uzasadnionych przypadkach możemy zwiększyć limit pamięci domyślnej po autoryzowanym kontakcie mailowym.

3.5. Wydłużony czas ładowania strony mimo uruchomionego mechanizm Redis

Należy pamiętać, że kluczowym dla poprawy wydajności ładowania zapytań SQL jest porządek w bazie danych. Zbędne pozostałości  w bazie, zbyt duże zawartości poszczególnych tabel i rekordów mogą wydłużyć czas ładowania zapytań. Włączenie w takiej sytuacji opcji serwer Redis może pogorszyć prędkość działania strony lub nie wpłynąć na poprawę wydajności. Serwer Redis nie jest magicznym rozwiązaniem dającym zawsze oczekiwane efekty w postaci przyspieszenia strony, zawsze wymagana są dodatkowe działania względem optymalizacji bazy danych MySQL.

3.6. Narzędzia wspomagające dniagnostykę Redis

W zależności od rodzaju aplikacji, jaka łączy się z serwerem Redis, wyróżnić możemy kilka alternatywnych narzędzi dostępnych z poziomu serwera, aplikacji lub Direct Admin:

  1. redis-cli — główne narzędzie dla serwera Redis, umożliwiające bezpośrednią komunikację z Redisem. Pozwala na wykonywanie komend, monitorowanie działania serwera, zarządzanie danymi i diagnostykę wydajności. Narzędzie to jest niezbędne dla administratorów i developerów do pracy z Redis. Przydatne polecenia:
    – MONITOR – sprawdzenie w czasie rzeczywistym zapisu danych do pamięci Redis.
    – PING – sprawdzenie odpowiedzi serwera po zalogowaniu
  2. X-Ray — narzędzie dostępne w pakiecie Wydajność. Umożliwia monitorowanie i wyszukiwanie najdłuższych zapytań SQL dla wskazanych pluginów co pomaga w analizie i optymalizacji CMS. Więcej o tym narzędzniu przeczytać można w poradniu: Jak zdiagnozować przyczynę spowolnienia strony? Narzędzie PHP X-Ray.
  3. WordPress (Query monitor) — podobnie jak X-Ray, umożliwia śledzenie zapytań bazodanowych i czasów wykonywania skryptów. Pomaga w ustaleniu najbardziej obciążających system procesów, monitorując pracę CMS w czasie rzeczywistym.
  4. WordPress (WP-CLI) — dedykowany command line dla systemu CMS WordPress. Posiada masę poleceń do zarządzania całym CMS w tym również dedykowane polecenia dla obsługi określonych pluginów. W kontekście Redis należy weryfikować czy dany plugin nie posiada swoich dedykowanych poleceń. 

4. Porady od _Folksów!

  • Upewnij się, że połączenie bezpośrednie z serwerem działa — dzięki tej dobrej praktyce można zaoszczędzić wiele czasu jeżeli chodzi o weryfikację dalszych problemów z konfiguracją po stronie CMS.  
  • Nie mieszaj pluginów do obsługi Cache i Redis – jeżeli z jakiś przyczyn potrzebujesz skorzystać z osobnego narzędzia do obsługi cache i objact cache postaraj się, aby nie wystąpiły konflikty konfiguracji i połączeń obu pluginów. Dodatkowo im więcej pluginów do obsługi cache, tym gorzej dla strony. 
  • Optymalizuj bazę danych —  do poprawnego działania mechanizmów optymalizujących Redis wymagana jest dbałość o porządek w bazie danych. Usuwaj zbędne dane i rekordy, optymalizuj tabele, monitoruj zapytania SQL celem wykluczania błędnych i zbyt ciężkich zapytań.

5. FAQ Pytania i odpowiedzi

Jeżeli posiadasz pakiety, w których dostępny jest serwer Redis, skontaktuj się z działem technicznym celem ręcznego aktywowania funkcji w panelu.

Niestety, ale nie ma możliwości skorzystania z serwera Redis dla wyżej wymienionych usług. Zamiennie na życzenie klienta instalujemy Memcached po autoryzowanym kontakcie mailowym. Jest też opcją połączenia się z serwerem zewnętrznym (np. samodzielnie postawionym serwerze na własnej maszynie)

Jeżeli nie pamiętasz danych dostępowych, możesz skorzystać z opcji automatycznego logowania z poziomu Moje aplikacje, lub zmiany loginu i hasła do zaplecza strony z poziomu opcji Edycji aplikacji. Jeżeli aplikacji nie ma na liście zaimportuj ją opcją Dodaj aplikację/ Import lokalny.

Niestety, ale połączenie można nawiązać tylko w obrębie naszej sieci z poziomu naszych serwerów. Próby połączenia z zewnątrz będą odrzucane.