Capitolo 5 di 5

Installare Redis su Debian 13 e collegarlo a Laravel

verificato il 7 Settembre 2026 · 4 min

Risposta rapida

Installa redis-server e l'estensione php-redis, poi imposta nel .env: REDIS_CLIENT=phpredis, CACHE_STORE=redis, SESSION_DRIVER=redis e QUEUE_CONNECTION=redis. Attenzione: CACHE_DRIVER e QUEUE_DRIVER non esistono più, una chiave sconosciuta viene ignorata senza errore e l'applicazione resta sul suo driver predefinito.

Redis fa da cache, da archivio delle sessioni e da coda di lavori per un’applicazione Laravel. Debian 13 fornisce Redis 8, e Laravel 13 ci si collega di default con l’estensione phpredis, più rapida della libreria PHP predis raccomandata per anni.

Questo capitolo prosegue l’installazione di Laravel su Debian, nel percorso Sviluppo web. Installazione e integrazione verificate su Debian 13 « trixie » con Laravel 13.30.1, il 2 settembre 2026.

Installare Redis e l’estensione PHP

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

Due pacchetti, due ruoli: redis-server è il server, php-redis l’estensione che permette a PHP di parlargli. Controlla entrambi:

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 conferma che il servizio gira e risponde. Attivalo all’avvio:

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

Mettere in sicurezza prima di andare avanti

Un Redis esposto senza password su un’interfaccia pubblica è leggibile e modificabile da chiunque. È un incidente classico, e la configurazione predefinita di Debian protegge già l’essenziale, ma vale la pena controllarla.

bash
sudo nano /etc/redis/redis.conf
/etc/redis/redis.conf
# ascolta solo sull'interfaccia di loopback
bind 127.0.0.1 -::1

# rifiuta le connessioni non autenticate provenienti dall'esterno
protected-mode yes

# password, indispensabile appena Redis non è più sulla stessa macchina
requirepass un_mot_de_passe_long_et_aleatoire
bash
sudo systemctl restart redis-server

Se l’applicazione e Redis stanno sulla stessa macchina, tieni bind 127.0.0.1: è la configurazione più sicura, e la password diventa una seconda barriera invece dell’unica.

Configurare Laravel

Le chiavi del file .env hanno cambiato nome nel corso delle versioni. Ecco quelle di Laravel 13, così come compaiono nel file generato durante l’installazione:

.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 e QUEUE_DRIVER non esistono più

È l’errore più frequente su questo argomento, ed è silenzioso: una chiave sconosciuta nel .env non provoca nessun errore, l’applicazione continua semplicemente a usare il suo driver predefinito. QUEUE_DRIVER è stato rinominato QUEUE_CONNECTION già in Laravel 5.7, e CACHE_DRIVER è diventato CACHE_STORE in Laravel 11.

Ricarica la configurazione e controlla che cosa usa davvero l’applicazione. Attenzione: la cache di configurazione congela questi valori:

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

Verificare che funzioni davvero

Un’impostazione accettata non è un’impostazione che funziona. Scrivi un valore e rileggilo:

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

Qui serve il nome completo della facade: una volta installata l’estensione phpredis, Redis designa la classe dell’estensione, Laravel non registra più il suo alias, e un semplice Redis::ping() fallisce con « Non-static method Redis::ping() cannot be called statically ».

code
Cache::get   : valeur
Redis::ping  : 1
version      : 8.0.2
Perché le tue chiavi sembrano introvabili

Un redis-cli --scan sul database 0 non restituisce niente, e se ne conclude che la cache non funziona. In realtà Laravel scrive la cache nel database 1 e sovrappone due prefissi. La chiave dell’esempio qui sopra è registrata con questo nome esatto:

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

Il primo prefisso viene da database.redis.options.prefix, il secondo da cache.prefix. Il database 1 è fissato da database.redis.cache.database, il che isola la cache dalle code e dalle sessioni.

phpredis o predis

phpredis predis
Natura estensione C libreria PHP
Installazione apt install php-redis composer require predis/predis
Predefinito in Laravel 13 sì no
Accesso root al server necessario non necessario

Preferisci phpredis ogni volta che amministri la macchina: la gestione del protocollo avviene in C. predis resta utile su un hosting condiviso, dove non puoi installare estensioni. In quel caso:

bash
composer require predis/predis
.env
REDIS_CLIENT=predis

Gestire le code

Spostare QUEUE_CONNECTION su Redis non basta: serve un processo che consumi i job.

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

I log di questi processi si trovano sotto storage/logs, il percorso restituito da storage_path() tra i percorsi dell’applicazione. In produzione il processo va supervisionato, per ripartire dopo un crash o un deploy. Supervisor è lo strumento abituale, ma anche una unit systemd fa il suo lavoro. Ricordati di riavviare i processi dopo ogni deploy, altrimenti continuano a eseguire il vecchio codice caricato in memoria:

bash
php artisan queue:restart

Errori frequenti

CACHE_DRIVER e QUEUE_DRIVER non esistono più Rinominati CACHE_STORE (Laravel 11) e QUEUE_CONNECTION (Laravel 5.7). Una chiave sconosciuta non emette nessun errore: l'applicazione prosegue semplicemente sul suo driver predefinito.
Cercare le chiavi nel database 0 Laravel scrive la cache nel database 1. Usa redis-cli -n 1 --scan.
Dimenticare i due prefissi La chiave porta il prefisso della connessione e quello della cache: laravel-database-laravel-cache-…
Installare predis per abitudine Da Laravel 11 il client predefinito è phpredis, un'estensione C più rapida. predis si giustifica solo senza accesso root.
Redis esposto senza password Tieni bind 127.0.0.1 quando l'applicazione è sulla stessa macchina, e aggiungi requirepass appena non lo è più.
QUEUE_CONNECTION=redis senza processo di elaborazione I job si accumulano senza mai essere eseguiti finché non gira un queue:work.
Newsletter

I nuovi test, tutorial e progetti, via e-mail.

Test riproducibili, codice versionato, risultati datati. Mai spam.