f in x
> cd .. / HUB_EDITORIALE > Visualizza in Inglese
Sviluppo di siti web

Redis con Laravel: Guida Operativa a Session, Cache e Queue

[2026-06-17] Author: Ing. Calogero Bono

Se il tuo Laravel rallenta quando arrivano 50 utenti contemporanei, il problema non è il framework. Spesso è il driver di sessione, cache o coda che hai scelto. File, database, array: funzionano per lo sviluppo, ma in produzione ti strozzano. Noi, di Meteora Web, lo vediamo ogni giorno nei progetti che ci arrivano in consulenza. La soluzione si chiama Redis, e in Laravel è integrato alla perfezione. Vediamo come configurarlo e usarlo per session, cache e queue, con esempi che puoi copiare e mettere subito in produzione.

Perché Redis con Laravel conviene davvero

Redis è un database in memoria, velocissimo. In Laravel, puoi usarlo come driver per tre sistemi critici: sessioni, cache e code. Quando un utente fa una richiesta, la sessione letta da file o database aggiunge latenza. La cache in file system funziona ma scala male su più server. Le code con database diventano un collo di bottiglia. Redis risolve tutto con un unico servizio, persistente se vuoi, e con una latenza sotto il millisecondo.

Noi abbiamo scelto Redis per clienti con e-commerce in WooCommerce custom e piattaforme Laravel proprietarie. Il risultato? Tempi di risposta dimezzati, code processate in tempo reale, sessioni condivise tra server. E la configurazione è più semplice di quanto pensi.

Configurare Redis in Laravel

Installare e avviare Redis sul server

Prima di tutto, Redis deve essere installato. Su Ubuntu/Debian:

Sponsored Protocol

sudo apt update
sudo apt install redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server

Verifica che funzioni:

redis-cli ping
# Output: PONG

Per configurazioni più avanzate (persistenza, password, porte), vedi la documentazione ufficiale Redis.

Configurare Laravel per usare Redis

Laravel include già il supporto Redis via predis o phpredis. Noi consigliamo phpredis per performance migliori. Installalo:

sudo apt install php8.3-redis  # adatta alla tua versione PHP

Poi nel .env del progetto:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Nel file config/database.php troverai già la sezione redis. Noi la personalizziamo così:

'redis' => [
    'client' => env('REDIS_CLIENT', 'phpredis'),
    'options' => [
        'cluster' => env('REDIS_CLUSTER', 'redis'),
        'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
    ],
    'default' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'username' => env('REDIS_USERNAME'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '0'),
    ],
    'cache' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'username' => env('REDIS_USERNAME'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_CACHE_DB', '1'),
    ],
],

Nota la separazione tra connessione default e cache: usiamo database Redis diversi per evitare conflitti di chiavi.

Sponsored Protocol

Usare Redis per le Sessioni

Nel .env imposta:

SESSION_DRIVER=redis

Laravel userà Redis per memorizzare i dati di sessione. Il vantaggio è enorme: sessioni condivise tra più istanze del server (utile se usi load balancing) e velocità di lettura/scrittura quasi istantanea. Zero file I/O, zero query al database.

Errore comune: dimenticare di impostare un prefisso univoco per le chiavi Redis. Per evitare collisioni, aggiungi nel .env:

SESSION_CONNECTION=default
# oppure, se vuoi usare una connessione separata
# SESSION_CONNECTION=sessions

Noi di Meteora Web verifichiamo sempre che le sessioni funzionino anche dopo un deploy. Redis è persistente (se configurato) ma in produzione consigliamo di attivare RDB o AOF per non perdere sessioni in caso di crash. Vedi la guida alla persistenza Redis.

Usare Redis per la Cache

Driver e Store

Imposta nel .env:

Sponsored Protocol

CACHE_DRIVER=redis

Laravel supporta i cache tags con Redis. I tag ti permettono di invalidare gruppi di chiavi. Esempio pratico:

// Salva in cache con tag
Cache::tags(['products', 'prices'])->put('product_123', $data, 3600);

// Recupera
$product = Cache::tags(['products', 'prices'])->get('product_123');

// Invalida tutti i prezzi
Cache::tags(['prices'])->flush();

Questo è potente: puoi aggiornare una categoria intera senza sapere tutte le chiavi. Redis gestisce i tag con insiemi (set).

TTL e Cache Busting

Imposta tempi di scadenza adeguati. Per dati che cambiano raramente (es. configurazioni, liste di prodotti), usa TTL lunghi. Per dati volatili, TTL brevi. Noi usiamo un pattern: cache forever con invalidazione esplicita via eventi (es. model saved).

// App/Providers/EventServiceProvider.php
protected $listen = [
    'eloquent.saved: App\Models\Product' => [
        'App\Listeners\ClearProductCache',
    ],
];

// App/Listeners/ClearProductCache.php
public function handle(Product $product)
{
    Cache::tags(['products'])->flush();
}

Usare Redis per le Queue

Le code in Laravel con driver database funzionano, ma non scalano. Ad ogni job, una query di insert e una di update. Con Redis, tutto in memoria, molto più veloce.

Configurazione nel .env:

Sponsored Protocol

QUEUE_CONNECTION=redis

Poi esegui il worker:

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

Per gestire più code con priorità, definisci in config/queue.php:

'connections' => [
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
        'after_commit' => false,
    ],
],

Puoi specificare code multiple: high, low, default. Poi nei job usa:

ProcessPodcast::dispatch()->onQueue('high');

E avvia i worker su code specifiche:

php artisan queue:work redis --queue=high,default

Laravel Horizon per la gestione avanzata

Per progetti seri, usa Horizon. È un pannello di controllo per Redis queue, sviluppato da Laravel. Installazione:

composer require laravel/horizon
php artisan horizon:install

Configura config/horizon.php per definire worker, bilanciamento, notifiche. Poi avvia:

php artisan horizon

Horizon ti dà metriche, fallimenti, velocità in tempo reale. Noi lo usiamo su tutti i progetti Laravel che superano i 10 job al minuto.

Errori comuni e come evitarli

  • Connessione persa: Redis non è in esecuzione. Controlla con systemctl status redis e abilita il riavvio automatico.
  • Memoria esaurita: Redis ha una memoria limitata. Configura maxmemory e maxmemory-policy (es. allkeys-lru).
  • Chiavi che collidono: Usa prefissi univoci per ogni applicazione (vedi REDIS_PREFIX).
  • Queue worker bloccato: Usa supervisor per mantenere i worker attivi. Noi lo configuriamo in 5 minuti.

Monitoraggio e performance

Usa redis-cli MONITOR per vedere i comandi in tempo reale. Su Laravel, installa laravel/telescope per tracciare query Redis e job queue. Un comando utile per vedere le chiavi:

Sponsored Protocol

redis-cli --scan --pattern 'laravel_*'

In sintesi — cosa fare adesso

  1. Installa Redis sul tuo server e verifica con redis-cli ping.
  2. Imposta SESSION_DRIVER=redis, CACHE_DRIVER=redis, QUEUE_CONNECTION=redis nel tuo .env.
  3. Configura separatamente il database Redis per cache (cache connection) e per sessioni/queue (default).
  4. Se usi code, installa Horizon e configuralo con supervisor.
  5. Testa il tutto: apri il sito, verifica che le sessioni funzionino, la cache sia popolata, i job vengano processati.

Redis non è un optional per Laravel in produzione: è la scelta professionale. Noi, di Meteora Web, lo adottiamo in ogni progetto che performa. Se vuoi approfondire l'intero ecosistema di caching e Redis, leggi la nostra guida pillar su Redis e Caching Strategies. Per argomenti correlati, vedi anche Linux per Sviluppatori e Sysadmin.

Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Ingegnere Informatico, co-fondatore di Meteora Web. Esperto in architetture software, sicurezza informatica e sviluppo sistemi scalabili.
[ Read Full Dossier ]

> METEORA_WEB // WEB AGENCY

Costruiamo la presenza digitale che la tua azienda merita.

Siti web, social, pubblicità online, e-commerce e hosting performante: ingegnerizzati con metodo da ingegneri informatici a Sciacca, per tutta Italia.

> MW_JOURNAL

> READ_ALL()