Rozdział 5 z 5

Instalacja Redisa na Debianie 13 i podpięcie go do Laravela

zweryfikowano 7 września 2026 · 4 min

Szybka odpowiedź

Zainstaluj redis-server i rozszerzenie php-redis, a potem wpisz do .env: REDIS_CLIENT=phpredis, CACHE_STORE=redis, SESSION_DRIVER=redis oraz QUEUE_CONNECTION=redis. Uwaga, CACHE_DRIVER i QUEUE_DRIVER już nie istnieją: nieznany klucz jest ignorowany bez błędu, a aplikacja zostaje przy domyślnym sterowniku.

Redis służy jako cache, magazyn sesji i kolejka zadań dla aplikacji Laravel. Debian 13 dostarcza Redisa 8, a Laravel 13 łączy się z nim domyślnie przez rozszerzenie phpredis, szybsze niż długo polecana biblioteka PHP predis.

Ten rozdział przedłuża instalację Laravela na Debianie, w ścieżce Programowanie webowe. Instalacja i integracja sprawdzone na Debianie 13 „trixie” z Laravelem 13.30.1, 2 września 2026 roku.

Instalacja Redisa i rozszerzenia PHP

bash
sudo apt update
sudo apt install -y redis-server php-redis

Dwa pakiety, dwie role: redis-server to serwer, a php-redis to rozszerzenie, dzięki któremu PHP potrafi z nim rozmawiać. Sprawdź oba:

bash
redis-server --version
redis-cli ping
php -r 'echo extension_loaded("redis") ? phpversion("redis") : "absente", PHP_EOL;'
code
Redis server v=8.0.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64
PONG
6.2.0

PONG potwierdza, że usługa działa i odpowiada. Włącz ją przy starcie systemu:

bash
sudo systemctl enable --now redis-server
sudo systemctl status redis-server

Zabezpiecz się, zanim pójdziesz dalej

Redis wystawiony bez hasła na publiczny interfejs jest do odczytu i do zapisu dla każdego. To klasyczny incydent, a domyślna konfiguracja Debiana chroni już to, co najważniejsze, mimo to ją sprawdź.

bash
sudo nano /etc/redis/redis.conf
/etc/redis/redis.conf
# nasłuchuj tylko na pętli zwrotnej
bind 127.0.0.1 -::1

# odrzucaj nieuwierzytelnione połączenia z zewnątrz
protected-mode yes

# hasło, niezbędne, gdy Redis nie stoi już na tej samej maszynie
requirepass un_mot_de_passe_long_et_aleatoire
bash
sudo systemctl restart redis-server

Jeśli aplikacja i Redis stoją na tej samej maszynie, zostaw bind 127.0.0.1: to najbezpieczniejsza konfiguracja, a hasło staje się drugą barierą, a nie jedyną.

Konfiguracja Laravela

Klucze w pliku .env zmieniały nazwy wraz z kolejnymi wersjami. Oto te z Laravela 13, dokładnie tak, jak stoją w pliku wygenerowanym przy instalacji:

.env
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
CACHE_DRIVER i QUEUE_DRIVER już nie istnieją

To najczęstszy błąd w tym temacie i do tego cichy: nieznany klucz w .env nie wywołuje żadnego błędu, aplikacja po prostu dalej używa domyślnego sterownika. QUEUE_DRIVER został przemianowany na QUEUE_CONNECTION już w Laravelu 5.7, a CACHE_DRIVER stał się CACHE_STORE w Laravelu 11.

Przeładuj konfigurację i sprawdź, czego aplikacja faktycznie używa. Uwaga, cache konfiguracji zamraża te wartości:

bash
php artisan config:clear
php artisan tinker --execute='
  printf("client  : %s\n", config("database.redis.client"));
  printf("cache   : %s\n", config("cache.default"));
  printf("queue   : %s\n", config("queue.default"));
  printf("session : %s\n", config("session.driver"));
'
code
client  : phpredis
cache   : redis
queue   : redis
session : redis

Sprawdź, że to naprawdę działa

Ustawienie przyjęte to nie to samo co ustawienie działające. Zapisz wartość i odczytaj ją z powrotem:

bash
php artisan tinker --execute='
  Cache::put("gk_test", "valeur", 60);
  printf("Cache::get   : %s\n", Cache::get("gk_test"));
  printf("Redis::ping  : %s\n", Illuminate\Support\Facades\Redis::ping());
  printf("version      : %s\n", Illuminate\Support\Facades\Redis::info()["redis_version"]);
'

Pełna nazwa fasady jest tu niezbędna: po zainstalowaniu rozszerzenia phpredis Redis oznacza klasę rozszerzenia, Laravel nie rejestruje już swojego aliasu, a zwykłe Redis::ping() kończy się błędem „Non-static method Redis::ping() cannot be called statically”.

code
Cache::get   : valeur
Redis::ping  : 1
version      : 8.0.2
Dlaczego twoje klucze wydają się nie do znalezienia

redis-cli --scan na bazie 0 nic nie zwraca i stąd wniosek, że cache nie działa. W rzeczywistości Laravel zapisuje cache w bazie 1 i nakłada dwa prefiksy. Klucz z powyższego przykładu jest zapisany dokładnie pod taką nazwą:

bash
redis-cli -n 1 --scan
code
laravel-database-laravel-cache-gk_test

Pierwszy prefiks pochodzi z database.redis.options.prefix, drugi z cache.prefix. Bazę 1 ustala database.redis.cache.database, co izoluje cache od kolejek i sesji.

phpredis czy predis

phpredis predis
Rodzaj rozszerzenie w C biblioteka PHP
Instalacja apt install php-redis composer require predis/predis
Domyślne w Laravelu 13 tak nie
Dostęp roota do serwera konieczny niekonieczny

Wybieraj phpredis, o ile administrujesz maszyną: obsługa protokołu dzieje się w C. predis pozostaje przydatne na hostingu współdzielonym, gdzie nie zainstalujesz rozszerzenia. W takim wypadku:

bash
composer require predis/predis
.env
REDIS_CLIENT=predis

Obsługa kolejek

Przestawienie QUEUE_CONNECTION na Redisa nie wystarczy: potrzebny jest proces, który konsumuje zadania.

bash
php artisan queue:work redis --tries=3

Logi tych procesów leżą w storage/logs, ścieżce zwracanej przez storage_path() wśród ścieżek aplikacji. Na produkcji taki proces musi być nadzorowany, żeby wstawał po awarii albo po wdrożeniu. Zwykle służy do tego Supervisor, ale jednostka systemd też się nada. Pamiętaj o zrestartowaniu procesów po każdym wdrożeniu, inaczej dalej wykonują stary kod załadowany do pamięci:

bash
php artisan queue:restart

Częste błędy

CACHE_DRIVER i QUEUE_DRIVER już nie istnieją Przemianowane na CACHE_STORE (Laravel 11) i QUEUE_CONNECTION (Laravel 5.7). Nieznany klucz nie zgłasza żadnego błędu: aplikacja po prostu zostaje przy domyślnym sterowniku.
Szukanie kluczy w bazie 0 Laravel zapisuje cache w bazie 1. Użyj redis-cli -n 1 --scan.
Pominięcie obu prefiksów Klucz nosi prefiks połączenia i prefiks cache'u: laravel-database-laravel-cache-…
Instalowanie predis odruchowo Od Laravela 11 domyślnym klientem jest phpredis, szybsze rozszerzenie w C. predis ma sens tylko bez dostępu roota.
Redis wystawiony bez hasła Zostaw bind 127.0.0.1, gdy aplikacja stoi na tej samej maszynie, i dodaj requirepass, gdy tak już nie jest.
QUEUE_CONNECTION=redis bez procesu przetwarzającego Zadania piętrzą się i nigdy się nie wykonują, dopóki nie działa żaden queue:work.
Newsletter

Nowe testy, poradniki i projekty — e-mailem.

Powtarzalne testy, wersjonowany kod, datowane wyniki. Nigdy spamu.