Redis installeren op Debian 13 en koppelen aan Laravel
geverifieerd op 7 september 2026 · 4 min
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
sudo apt update
sudo apt install -y redis-server php-redisTwee pakketten, twee rollen: redis-server is de server, php-redis de extensie waarmee PHP hem kan aanspreken. Controleer allebei:
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 bevestigt dat de service draait en antwoordt. Zet hem aan bij het opstarten:
sudo systemctl enable --now redis-server
sudo systemctl status redis-serverEerst 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.
sudo nano /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_aleatoiresudo systemctl restart redis-serverStaan 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:
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redisDit 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:
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 : redisNagaan of het echt werkt
Een instelling die geaccepteerd wordt, is nog geen instelling die werkt. Schrijf een waarde weg en lees hem terug:
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’.
Cache::get : valeur
Redis::ping : 1
version : 8.0.2Een 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:
redis-cli -n 1 --scanlaravel-database-laravel-cache-gk_testHet 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:
composer require predis/predisREDIS_CLIENT=predisDe wachtrijen verwerken
Alleen QUEUE_CONNECTION op Redis zetten is niet genoeg: er moet een proces zijn dat de taken oppakt.
php artisan queue:work redis --tries=3De 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:
php artisan queue:restartVeelgemaakte fouten
redis-cli -n 1 --scan.bind 127.0.0.1 aan zolang de applicatie op dezelfde machine draait, en voeg requirepass toe zodra dat niet meer zo is.queue:work draait.