Redis jako cache dla WordPress — konfiguracja object cache
Co to jest Redis i po co go używać z WordPress?
Redis to in-memory data store działający jako baza danych klucz-wartość. W kontekście WordPress pełni rolę object cache — przechowuje w pamięci RAM wyniki zapytań do bazy danych, opcje WordPressa (wp_options) oraz inne drogie obliczenia, eliminując powtarzające się zapytania SQL.
Standardowy WordPress bez zewnętrznego object cache używa cache nietrwałego (w pamięci PHP procesu), który jest kasowany po każdym żądaniu. Redis pozwala na cache trwały między żądaniami — jeden użytkownik "rozgrzewa" cache, kolejni korzystają z gotowych danych.
Powiązane tematy: PHP OPcache, konfiguracja Nginx vhost, WordPress security hardening oraz WordPress Multisite. Do porównania hostingów obsługujących Redis sprawdź kalkulator kosztów.
Wymagania — kiedy Redis ma sens?
- VPS lub serwer dedykowany — hosting współdzielony rzadko oferuje Redis
- PHP 7.4+ z rozszerzeniem
phpredislubpredis - RAM: minimum 128 MB dla Redis — dla małych stron wystarczy 64 MB; dla WooCommerce 256 MB+
- Witryny z WooCommerce, BuddyPress lub dużą liczbą wtyczek zyskują najwięcej
- Statyczne witryny z małym ruchem — zysk minimalny, prościej użyć cache stron (WP Super Cache)
Instalacja Redis na serwerze (Ubuntu/Debian)
sudo apt update
sudo apt install redis-server
# Sprawdź status
sudo systemctl status redis-server
# Test połączenia
redis-cli ping
# Oczekiwany wynik: PONG Konfiguracja maxmemory (/etc/redis/redis.conf)
# Ustaw maksymalny rozmiar pamięci
maxmemory 256mb
# Polityka eksmisji — usuń najrzadziej używane klucze gdy brak pamięci
maxmemory-policy allkeys-lru
# Bind tylko na localhost (bezpieczeństwo — nie wystawiaj Redis publicznie)
bind 127.0.0.1
# Wymagaj hasła (opcjonalnie, ale zalecane)
requirepass twoje_silne_haslo sudo systemctl restart redis-server Instalacja rozszerzenia PHP Redis
# Dla PHP 8.x (dostosuj wersję)
sudo apt install php8.2-redis
# Lub przez PECL
sudo pecl install redis
# Sprawdź czy rozszerzenie jest załadowane
php -m | grep redis Konfiguracja WordPress — wp-config.php
Dodaj przed linią /* That's all, stop editing! */:
// Redis Object Cache
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', 'twoje_silne_haslo' ); // jeśli ustawiłeś requirepass
define( 'WP_REDIS_DATABASE', 0 );
define( 'WP_REDIS_TIMEOUT', 1 );
define( 'WP_REDIS_READ_TIMEOUT', 1 );
// Prefix — ważne przy wielu instancjach WP na tym samym Redis
define( 'WP_REDIS_PREFIX', 'moja_strona:' );
// Opcjonalnie — wyłącz grupy które NIE powinny być cache'owane
define( 'WP_REDIS_IGNORED_GROUPS', [ 'counts', 'plugins' ] ); Instalacja wtyczki Redis Object Cache
Oficjalna wtyczka Redis Object Cache (autor: Till Krüss, 1M+ instalacji aktywnych)
dostarcza plik object-cache.php do katalogu wp-content/.
# Przez WP-CLI
wp plugin install redis-cache --activate
# Aktywuj object cache
wp redis enable
# Sprawdź status
wp redis status W panelu WordPress pojawi się widget Redis Object Cache na stronie głównej dashboard z informacją o połączeniu.
Weryfikacja — czy Redis działa?
# Monitoruj live ruch Redis
redis-cli monitor
# Sprawdź statystyki
redis-cli info stats | grep -E 'keyspace_hits|keyspace_misses|instantaneous_ops_per_sec'
# Sprawdź zajętą pamięć
redis-cli info memory | grep used_memory_human Dobre wyniki: hit rate > 80% oznacza skuteczny cache. Niska trafność (poniżej 50%) może sugerować zbyt agresywną eksmisję lub nieodpowiednią konfigurację.
Sprawdź przez WP-CLI
wp redis status
# Oczekiwane wyjście:
# Status: Connected
# Client: PhpRedis 6.x
# Hits: 1234 (89.5%)
# Misses: 145 (10.5%) WooCommerce — specjalne uwagi
WooCommerce generuje wiele transient options i cache sesji klientów. Zalecana konfiguracja:
// Nie cache'uj sesji WooCommerce w Redis (już w DB)
define( 'WP_REDIS_IGNORED_GROUPS', [
'counts',
'wc_session_id',
'woocommerce_transients',
] );
// Wydłuż timeout dla sklepów z dużym katalogiem
define( 'WP_REDIS_TIMEOUT', 2 );
define( 'WP_REDIS_READ_TIMEOUT', 2 ); Dla WooCommerce z 1000+ produktów przydziel minimum 512 MB pamięci Redis i monitoruj eviction rate — zbyt częste eksmisje kluczy negują korzyści cache.
Typowe problemy i rozwiązania
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| Connection refused | Redis nie nasłuchuje / zły port | redis-cli ping, sprawdź bind w redis.conf |
| NOAUTH Authentication required | Brak WP_REDIS_PASSWORD | Dodaj stałą do wp-config.php |
| Hit rate < 30% | Za mało pamięci — agresywna eksmisja | Zwiększ maxmemory lub zmień policy na volatile-lru |
| Stale content po aktualizacji | Cache nie jest inwalidowany | wp redis flush lub redis-cli FLUSHDB |
| PHP Fatal: Class 'Redis' not found | Brak rozszerzenia phpredis | Zainstaluj php-redis lub użyj predis (czysty PHP) |
Redis vs alternatywy
| Rozwiązanie | Typ cache | Wymaga VPS? | Zastosowanie |
|---|---|---|---|
| Redis Object Cache | Object cache (baza, opcje) | Tak | WooCommerce, portale |
| Memcached | Object cache | Tak | Prostsze instalacje |
| WP Super Cache / W3TC | Cache stron (HTML) | Nie | Blogi, statyczne treści |
| LiteSpeed Cache | Full-page + object | Nie (wymaga LiteSpeed) | Hosting z LiteSpeed |
| PHP OPcache | Cache bytecode PHP | Nie | Zawsze włącz — podstawa |
Optymalna konfiguracja: OPcache + Redis + cache stron (trzy warstwy) — każda eliminuje inny rodzaj opóźnienia.