Redis auf Debian 13 installieren und in Laravel einbinden
geprüft am 7 September 2026 · 4 Min.
Installier redis-server und die Erweiterung php-redis und trag dann in der .env ein: REDIS_CLIENT=phpredis, CACHE_STORE=redis, SESSION_DRIVER=redis und QUEUE_CONNECTION=redis. Achtung: CACHE_DRIVER und QUEUE_DRIVER gibt es nicht mehr, ein unbekannter Schlüssel wird ohne Fehler ignoriert, und die Anwendung behält ihren Standardtreiber.
Redis dient einer Laravel-Anwendung als Cache, als Session-Speicher und als Queue. Debian 13 liefert Redis 8, und Laravel 13 verbindet sich standardmäßig über die Erweiterung phpredis damit, schneller als die lange empfohlene PHP-Bibliothek predis.
Dieses Kapitel setzt die Installation von Laravel auf Debian fort, im Lernpfad Webentwicklung. Installation und Anbindung geprüft auf Debian 13 „trixie“ mit Laravel 13.30.1, am 2. September 2026.
Redis und die PHP-Erweiterung installieren
sudo apt update
sudo apt install -y redis-server php-redisZwei Pakete, zwei Rollen: redis-server ist der Server, php-redis die Erweiterung, über die PHP mit ihm spricht. Prüf beide:
redis-server --version
redis-cli ping
php -r 'echo extension_loaded("redis") ? phpversion("redis") : "absente", PHP_EOL;'Redis server v=8.0.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64
PONG
6.2.0PONG bestätigt, dass der Dienst läuft und antwortet. Aktivier ihn für den Systemstart:
sudo systemctl enable --now redis-server
sudo systemctl status redis-serverAbsichern, bevor es weitergeht
Ein Redis, das ohne Passwort an einer öffentlichen Schnittstelle hängt, kann jeder lesen und verändern. Das ist ein Klassiker unter den Vorfällen. Die Standardkonfiguration von Debian deckt das Wesentliche bereits ab, aber prüf sie nach.
sudo nano /etc/redis/redis.conf# nur auf dem Loopback lauschen
bind 127.0.0.1 -::1
# nicht authentifizierte Verbindungen von außen ablehnen
protected-mode yes
# Passwort, unverzichtbar, sobald Redis nicht mehr auf derselben Maschine läuft
requirepass un_mot_de_passe_long_et_aleatoiresudo systemctl restart redis-serverLaufen Anwendung und Redis auf derselben Maschine, behalt bind 127.0.0.1 bei: Das ist die sicherste Konfiguration, und das Passwort wird zur zweiten Barriere statt zur einzigen.
Laravel konfigurieren
Die Schlüssel in der Datei .env haben über die Versionen hinweg ihre Namen gewechselt. Das hier sind die von Laravel 13, so wie sie in der bei der Installation erzeugten Datei stehen:
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redisDas ist der häufigste Fehler zu diesem Thema, und er passiert lautlos: Ein unbekannter Schlüssel in der .env löst keinerlei Fehler aus, die Anwendung nutzt schlicht weiter ihren Standardtreiber. QUEUE_DRIVER heißt seit Laravel 5.7 QUEUE_CONNECTION, und aus CACHE_DRIVER wurde in Laravel 11 CACHE_STORE.
Lad die Konfiguration neu und prüf nach, was die Anwendung tatsächlich verwendet. Achtung: der Konfigurations-Cache friert diese Werte ein:
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"));
'client : phpredis
cache : redis
queue : redis
session : redisPrüfen, dass es wirklich funktioniert
Eine angenommene Einstellung ist noch keine funktionierende Einstellung. Schreib einen Wert und lies ihn wieder aus:
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"]);
'Hier ist der vollständige Name der Fassade nötig: Sobald die Erweiterung phpredis installiert ist, bezeichnet Redis die Klasse der Erweiterung, Laravel registriert seinen Alias nicht mehr, und ein einfaches Redis::ping() scheitert mit „Non-static method Redis::ping() cannot be called statically“.
Cache::get : valeur
Redis::ping : 1
version : 8.0.2Ein redis-cli --scan auf Datenbank 0 liefert nichts, und man schließt daraus, dass der Cache nicht funktioniert. Tatsächlich schreibt Laravel den Cache in Datenbank 1 und stapelt zwei Präfixe. Der Schlüssel aus dem Beispiel oben liegt unter genau diesem Namen:
redis-cli -n 1 --scanlaravel-database-laravel-cache-gk_testDas erste Präfix stammt aus database.redis.options.prefix, das zweite aus cache.prefix. Datenbank 1 legt database.redis.cache.database fest, was den Cache von den Queues und den Sessions trennt.
phpredis oder predis
phpredis | predis | |
|---|---|---|
| Art | C-Erweiterung | PHP-Bibliothek |
| Installation | apt install php-redis | composer require predis/predis |
| Standard in Laravel 13 | ja | nein |
| Root-Zugriff auf den Server | nötig | nicht nötig |
Nimm phpredis, sobald du die Maschine selbst administrierst: Das Protokoll wird in C verarbeitet. predis bleibt auf Shared Hosting nützlich, wo du keine Erweiterung installieren kannst. Dann so:
composer require predis/predisREDIS_CLIENT=predisDie Queues abarbeiten
QUEUE_CONNECTION auf Redis umzustellen reicht nicht: Es braucht einen Prozess, der die Jobs abarbeitet.
php artisan queue:work redis --tries=3Die Logs dieser Prozesse liegen unter storage/logs, dem Pfad, den storage_path() unter den Pfaden der Anwendung zurückgibt. In Produktion muss dieser Prozess überwacht werden, damit er nach einem Absturz oder einem Deployment neu startet. Supervisor ist das übliche Werkzeug, aber eine systemd-Unit tut es auch. Denk daran, die Prozesse nach jedem Deployment neu zu starten, sonst führen sie weiter den alten, im Speicher geladenen Code aus:
php artisan queue:restartHäufige Fehler
redis-cli -n 1 --scan.bind 127.0.0.1 bei, solange die Anwendung auf derselben Maschine läuft, und ergänz requirepass, sobald das nicht mehr der Fall ist.queue:work läuft.