Kapitel 5 von 5

Redis auf Debian 13 installieren und in Laravel einbinden

geprüft am 7 September 2026 · 4 Min.

Schnelle Antwort

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

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

Zwei Pakete, zwei Rollen: redis-server ist der Server, php-redis die Erweiterung, über die PHP mit ihm spricht. Prüf beide:

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 bestätigt, dass der Dienst läuft und antwortet. Aktivier ihn für den Systemstart:

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

Absichern, 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.

bash
sudo nano /etc/redis/redis.conf
/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_aleatoire
bash
sudo systemctl restart redis-server

Laufen 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:

.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 und QUEUE_DRIVER gibt es nicht mehr

Das 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:

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

Prüfen, dass es wirklich funktioniert

Eine angenommene Einstellung ist noch keine funktionierende Einstellung. Schreib einen Wert und lies ihn wieder aus:

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"]);
'

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“.

code
Cache::get   : valeur
Redis::ping  : 1
version      : 8.0.2
Warum deine Schlüssel unauffindbar scheinen

Ein 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:

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

Das 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:

bash
composer require predis/predis
.env
REDIS_CLIENT=predis

Die Queues abarbeiten

QUEUE_CONNECTION auf Redis umzustellen reicht nicht: Es braucht einen Prozess, der die Jobs abarbeitet.

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

Die 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:

bash
php artisan queue:restart

Häufige Fehler

CACHE_DRIVER und QUEUE_DRIVER gibt es nicht mehr Umbenannt in CACHE_STORE (Laravel 11) und QUEUE_CONNECTION (Laravel 5.7). Ein unbekannter Schlüssel meldet keinen Fehler: Die Anwendung läuft einfach mit ihrem Standardtreiber weiter.
Die Schlüssel in Datenbank 0 suchen Laravel schreibt den Cache in Datenbank 1. Nimm redis-cli -n 1 --scan.
Die beiden Präfixe vergessen Der Schlüssel trägt das Präfix der Verbindung und das des Caches: laravel-database-laravel-cache-…
predis aus Gewohnheit installieren Seit Laravel 11 ist phpredis der Standard-Client, eine schnellere C-Erweiterung. predis lohnt sich nur ohne Root-Zugriff.
Redis ohne Passwort exponiert Behalt 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_CONNECTION=redis ohne Worker-Prozess Die Jobs stapeln sich, ohne je ausgeführt zu werden, solange kein queue:work läuft.
Newsletter

Neue Tests, Tutorials und Projekte, per E-Mail.

Reproduzierbare Tests, versionierter Code, datierte Ergebnisse. Niemals Spam.