Hoofdstuk 5 van 5

Redis installeren op Debian 13 en koppelen aan Laravel

geverifieerd op 7 september 2026 · 4 min

Kort antwoord

Installeer redis-server en de extensie php-redis en zet daarna in de .env: REDIS_CLIENT=phpredis, CACHE_STORE=redis, SESSION_DRIVER=redis en QUEUE_CONNECTION=redis. Let op: CACHE_DRIVER en QUEUE_DRIVER bestaan niet meer. Een onbekende sleutel wordt zonder foutmelding genegeerd en de applicatie houdt haar standaarddriver.

Redis doet dienst als cache, sessieopslag en wachtrij voor een Laravel-applicatie. Debian 13 levert Redis 8, en Laravel 13 verbindt er standaard mee via de extensie phpredis, die sneller is dan de PHP-library predis die lang werd aangeraden.

Dit hoofdstuk borduurt voort op de installatie van Laravel op Debian, in het traject Webontwikkeling. Installatie en integratie zijn op 2 september 2026 gecontroleerd op Debian 13 “trixie” met Laravel 13.30.1.

Redis en de PHP-extensie installeren

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

Twee pakketten, twee rollen: redis-server is de server, php-redis de extensie waarmee PHP hem kan aanspreken. Controleer allebei:

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 bevestigt dat de service draait en antwoordt. Zet hem aan bij het opstarten:

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

Eerst beveiligen, dan verder

Een Redis die zonder wachtwoord aan een publieke interface hangt, is voor iedereen leesbaar en aanpasbaar. Dat is een klassiek incident, en de standaardconfiguratie van Debian dekt het belangrijkste al af, maar controleer haar toch.

bash
sudo nano /etc/redis/redis.conf
/etc/redis/redis.conf
# alleen op de loopback luisteren
bind 127.0.0.1 -::1

# niet-geauthenticeerde verbindingen van buitenaf weigeren
protected-mode yes

# wachtwoord, onmisbaar zodra Redis niet meer op dezelfde machine staat
requirepass un_mot_de_passe_long_et_aleatoire
bash
sudo systemctl restart redis-server

Staan de applicatie en Redis op dezelfde machine, houd dan bind 127.0.0.1 aan: dat is de veiligste opstelling, en het wachtwoord wordt zo een tweede barrière in plaats van de enige.

Laravel configureren

De sleutels in het bestand .env zijn door de versies heen van naam veranderd. Dit zijn die van Laravel 13, zoals ze in het bij de installatie gegenereerde bestand staan:

.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 en QUEUE_DRIVER bestaan niet meer

Dit is de meest gemaakte fout op dit onderwerp, en ze verloopt geruisloos: een onbekende sleutel in de .env levert geen enkele foutmelding op, de applicatie blijft simpelweg haar standaarddriver gebruiken. QUEUE_DRIVER heet sinds Laravel 5.7 QUEUE_CONNECTION, en CACHE_DRIVER werd in Laravel 11 CACHE_STORE.

Herlaad de configuratie en kijk na wat de applicatie werkelijk gebruikt. Let op: de configuratiecache zet deze waarden vast:

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

Nagaan of het echt werkt

Een instelling die geaccepteerd wordt, is nog geen instelling die werkt. Schrijf een waarde weg en lees hem terug:

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

De volledige naam van de facade is hier nodig: zodra de extensie phpredis is geïnstalleerd, verwijst Redis naar de klasse van de extensie, registreert Laravel zijn alias niet meer en mislukt een gewone Redis::ping() met ‘Non-static method Redis::ping() cannot be called statically’.

code
Cache::get   : valeur
Redis::ping  : 1
version      : 8.0.2
Waarom je je sleutels niet lijkt te vinden

Een redis-cli --scan op database 0 levert niets op, en daaruit wordt geconcludeerd dat de cache niet werkt. In werkelijkheid schrijft Laravel de cache naar database 1 en stapelt het twee prefixen op elkaar. De sleutel uit het voorbeeld hierboven staat onder precies deze naam opgeslagen:

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

Het eerste prefix komt uit database.redis.options.prefix, het tweede uit cache.prefix. Database 1 wordt vastgelegd door database.redis.cache.database, waardoor de cache gescheiden blijft van de wachtrijen en de sessies.

phpredis of predis

phpredis predis
Aard C-extensie PHP-library
Installatie apt install php-redis composer require predis/predis
Standaard in Laravel 13 ja nee
Rootrechten op de server nodig niet nodig

Kies phpredis zodra je de machine zelf beheert: het protocol wordt in C afgehandeld. predis blijft nuttig op shared hosting, waar je geen extensies kunt installeren. In dat geval:

bash
composer require predis/predis
.env
REDIS_CLIENT=predis

De wachtrijen verwerken

Alleen QUEUE_CONNECTION op Redis zetten is niet genoeg: er moet een proces zijn dat de taken oppakt.

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

De logs van die processen staan onder storage/logs, het pad dat storage_path() teruggeeft, een van de paden van de applicatie. In productie moet dit proces onder supervisie draaien, zodat het na een crash of een deployment opnieuw start. Supervisor is daarvoor het gebruikelijke gereedschap, maar een systemd-unit voldoet ook. Denk eraan de processen na elke deployment te herstarten, anders blijven ze de oude code uitvoeren die in het geheugen staat:

bash
php artisan queue:restart

Veelgemaakte fouten

CACHE_DRIVER en QUEUE_DRIVER bestaan niet meer Hernoemd naar CACHE_STORE (Laravel 11) en QUEUE_CONNECTION (Laravel 5.7). Een onbekende sleutel geeft geen enkele fout: de applicatie draait gewoon door op haar standaarddriver.
De sleutels zoeken in database 0 Laravel schrijft de cache naar database 1. Gebruik redis-cli -n 1 --scan.
De twee prefixen vergeten De sleutel draagt het prefix van de verbinding en dat van de cache: laravel-database-laravel-cache-…
Uit gewoonte predis installeren Sinds Laravel 11 is phpredis de standaardclient, een C-extensie die sneller is. predis is alleen te verdedigen zonder rootrechten.
Redis zonder wachtwoord blootgesteld Houd bind 127.0.0.1 aan zolang de applicatie op dezelfde machine draait, en voeg requirepass toe zodra dat niet meer zo is.
QUEUE_CONNECTION=redis zonder verwerkend proces De taken stapelen zich op en worden nooit uitgevoerd zolang er geen queue:work draait.
Nieuwsbrief

Nieuwe tests, tutorials en projecten, per e-mail.

Reproduceerbare tests, geversioneerde code, gedateerde resultaten. Nooit spam.