Redis: guida tecnica completa all’installazione, configurazione e ottimizzazione
Redis è il sistema di caching in-memory più diffuso al mondo. Nato nel 2009 come progetto open source di Salvatore Sanfilippo, è diventato lo standard de facto per object caching, session store e message broker in architetture web ad alte prestazioni. Il nome è l’acronimo di REmote DIctionary Server: un database chiave-valore che opera interamente in RAM, con latenze nell’ordine dei microsecondi.
In guide precedenti ho trattato OPcache e Memcached. Redis copre uno spazio funzionale diverso e più ampio: non si limita a memorizzare coppie chiave-valore semplici, ma supporta strutture dati complesse — stringhe, hash, liste, set, set ordinati, stream, bitmap e HyperLogLog. Con la versione 8.0 (2025) ha integrato nel core anche moduli che prima richiedevano Redis Stack: ricerca full-text, documenti JSON, serie temporali, filtri di Bloom e vector search nativo per workload AI/RAG.
Questa guida copre l’intero ciclo di vita: dall’installazione su Ubuntu moderno (22.04/24.04) con PHP 8.x, alla configurazione per ambienti di produzione, fino all’integrazione con WordPress e al monitoraggio operativo.
Cos’è Redis e a cosa serve
Redis è un data structure store in-memory. A differenza dei database relazionali che scrivono su disco e usano la RAM come cache, Redis opera nativamente in memoria e usa il disco solo per la persistenza opzionale. Questo gli consente di gestire milioni di operazioni al secondo con latenze sub-millisecondo.
I casi d’uso principali in ambito web:
- Object caching — riduce le query al database memorizzando risultati frequenti (transient, option, query result) in RAM
- Session store — gestione sessioni PHP/applicative con TTL automatico, più veloce e scalabile delle sessioni su filesystem
- Message broker — code di messaggi con Redis Streams e Pub/Sub per architetture event-driven e microservizi
- Rate limiting — contatori atomici con scadenza per throttling API e protezione da abusi
- Full-text search e vector search — con Redis 8.0, ricerca testuale e vettoriale integrate nel core per applicazioni AI/RAG
- Cache distribuita — in architetture multi-server e cluster, Redis condivide lo stato tra nodi applicativi
Il vantaggio competitivo di Redis rispetto a Memcached è la ricchezza delle strutture dati. Memcached gestisce solo stringhe; Redis supporta operazioni atomiche su hash, liste ordinate, set con intersezioni, e comandi specializzati come INCR, LPUSH, ZADD che eliminano la necessità di read-modify-write lato applicazione. Questo si traduce in meno round-trip e meno codice.
Licenza e il fork Valkey
Il 20 marzo 2024 Redis Ltd. ha cambiato la licenza del progetto: dalla BSD-3-Clause (pienamente open source) alla dual license SSPLv1 / RSALv2. Nessuna delle due è riconosciuta come open source dalla Open Source Initiative (OSI). La motivazione dichiarata: impedire ai cloud provider (AWS, Google Cloud, Azure) di offrire Redis come servizio gestito senza contribuire al progetto.
La risposta della community è stata immediata. Nel marzo 2024 è nato Valkey, un fork di Redis 7.2.4 (l’ultima versione BSD) ospitato dalla Linux Foundation con governance vendor-neutral. Tra i contributor principali: AWS, Google Cloud, Oracle, Ericsson e diversi ex-maintainer core di Redis.
Cosa significa in pratica:
- Redis 8.x (Redis Ltd.) — source-available, gratuito per uso interno e sviluppo, ma non è possibile offrirlo come servizio cloud senza accordo commerciale
- Valkey 8.x (Linux Foundation) — licenza BSD, drop-in replacement, stesso protocollo RESP, stesse librerie client, compatibile al 100%
- I principali cloud provider (AWS ElastiCache, Google Memorystore) sono migrati a Valkey
- Le distribuzioni Linux (Fedora, Debian) stanno sostituendo Redis con Valkey nei repository
- Per un uso WordPress/PHP su server proprio, entrambi funzionano in modo identico — la scelta è filosofica/legale, non tecnica
Nota: tutti i comandi e le configurazioni in questa guida funzionano sia con Redis che con Valkey. Dove necessario, indicherò le differenze nei comandi di installazione.
Redis 8: cosa cambia
Redis 8.0, rilasciato nel 2025, è la prima major release sotto la nuova licenza e porta cambiamenti significativi. Il più rilevante: tutti i moduli di Redis Stack sono integrati nel core. Installando Redis 8 si ottengono nativamente funzionalità che prima richiedevano distribuzioni separate:
| Modulo | Funzionalità | Caso d’uso |
|---|---|---|
| RediSearch | Ricerca full-text + vector search | Motore di ricerca interno, RAG per LLM |
| RedisJSON | Documenti JSON nativi | Storage documenti senza serializzazione |
| RedisTimeSeries | Serie temporali | Metriche, monitoraggio, IoT |
| RedisBloom | Filtri probabilistici (Bloom, Cuckoo) | Deduplicazione, membership test |
Altre novità di rilievo:
- I/O threading migliorato — utilizzo più efficiente dei core CPU per le operazioni di I/O. Redis resta single-threaded per l’esecuzione dei comandi (garanzia di atomicità), ma il networking è ora parallelizzato
- Hash-based expiry su sub-key — scadenza granulare sui singoli campi degli hash
- ACL v2 consolidate — permessi selector-based per chiave, comando e canale Pub/Sub
- Persistenza AOF multi-part — introdotta in Redis 7, ora stabilizzata: file base + incrementali per recovery più veloce
Installare Redis su Ubuntu 22.04 e 24.04
L’installazione su Ubuntu moderno richiede pochi minuti. Mostro entrambe le opzioni: Redis (repo ufficiale Redis Ltd.) e Valkey.
Opzione A: Redis dal repository ufficiale
Aggiorna i pacchetti e aggiungi il repository Redis:
sudo apt update && sudo apt upgrade -y
# Aggiungi la chiave GPG e il repository
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update
sudo apt install redis -y
Opzione B: Valkey
Su Ubuntu 24.04 e successivi, Valkey è disponibile nei repository universe. In alternativa, usa il repository ufficiale del progetto:
sudo apt install valkey -y
# Oppure da Docker
docker run -d --name valkey -p 6379:6379 valkey/valkey:8
Abilitare il servizio
Dopo l’installazione, abilita l’avvio automatico e verifica lo stato:
sudo systemctl enable redis-server
sudo systemctl start redis-server
sudo systemctl status redis-server
Nota: per Valkey, il nome del servizio è valkey-server anziché redis-server.
Configurazione per ambienti di produzione
La configurazione di default è pensata per lo sviluppo. Per un ambiente di produzione servono interventi su memoria, sicurezza, persistenza e tuning del kernel.
Il file di configurazione principale si trova in:
/etc/redis/redis.conf
Memoria e policy di eviction
# Limite massimo di memoria (adatta al tuo server)
maxmemory 512mb
# Policy di eviction: rimuovi le chiavi meno usate di recente
maxmemory-policy allkeys-lru
La policy allkeys-lru è la scelta standard per il caching: quando Redis raggiunge il limite di memoria, rimuove automaticamente le chiavi con accesso meno recente. Alternative utili: volatile-lru (solo chiavi con TTL), allkeys-lfu (least frequently used, disponibile da Redis 4+).
Sicurezza
# Bind solo su localhost (o sulle interfacce necessarie)
bind 127.0.0.1 ::1
# Modalità protetta: rifiuta connessioni esterne senza password
protected-mode yes
# Password di accesso (usa una stringa lunga e casuale)
requirepass tua-password-complessa-qui
# ACL: disabilita comandi pericolosi per utenti non-admin
# Esempio: rinomina FLUSHALL per impedirne l'uso accidentale
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command DEBUG ""
Nota: da Redis 6+ è disponibile il sistema ACL completo, più granulare del semplice requirepass. Per ambienti con più applicazioni sullo stesso server Redis, le ACL permettono di creare utenti con permessi limitati a specifici pattern di chiavi e comandi.
Persistenza
Redis offre due meccanismi di persistenza, combinabili:
| Meccanismo | Come funziona | Quando usarlo |
|---|---|---|
| RDB (snapshot) | Salvataggio periodico di tutto il dataset su disco | Caching puro — perdere qualche minuto di dati è accettabile |
| AOF (Append Only File) | Log di ogni operazione di scrittura, replay al restart | Session store, code — servono garanzie di durabilità |
| RDB + AOF | Combinazione: AOF per durabilità, RDB per backup veloci | Produzione — raccomandata da Redis per il recovery più sicuro |
# Abilitare AOF
appendonly yes
appendfsync everysec
# RDB: snapshot ogni 3600 sec se almeno 1 chiave è cambiata
save 3600 1
save 300 100
save 60 10000
Tuning del kernel Linux
Per prestazioni ottimali in produzione, applica queste configurazioni a livello di sistema operativo:
# Overcommit memory: evita errori di fork durante il salvataggio RDB/AOF
sudo sysctl vm.overcommit_memory=1
# Disabilita Transparent Huge Pages (causa latenze)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# Per rendere permanenti le modifiche, aggiungi a /etc/sysctl.conf:
# vm.overcommit_memory = 1
# E in /etc/rc.local o in un servizio systemd:
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
Dopo le modifiche, riavvia il servizio:
sudo systemctl restart redis-server
Installare l’estensione PHP per Redis
L’estensione phpredis è il client C ad alte prestazioni per PHP. Supporta PHP 8.0, 8.1, 8.2, 8.3 e 8.4, ed è compatibile sia con Redis che con Valkey.
# Installa l'estensione per la tua versione di PHP
sudo apt install php8.3-redis -y
# Oppure tramite PECL
sudo pecl install redis
# Verifica l'installazione
php -m | grep redis
Se usi PHP-FPM (come nella maggior parte delle configurazioni Nginx), riavvia il servizio dopo l’installazione:
sudo systemctl restart php8.3-fpm
Configurazione php.ini
Per usare Redis come session handler PHP (alternativa ai file di sessione su disco):
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=tua-password"
Alternativa: Predis
Se non puoi installare estensioni C (hosting condiviso), Predis è un client Redis scritto interamente in PHP. Si installa via Composer (composer require predis/predis) ed è leggermente più lento di phpredis, ma non richiede compilazione. Predis 2.x supporta PHP 8.x e funziona con Valkey.
Redis e WordPress
WordPress dispone di un’API di object caching interna (wp_cache_get, wp_cache_set) che di default è non persistente — i dati vivono solo per la durata della singola richiesta HTTP. Collegando Redis come backend persistente, le query più frequenti al database (opzioni, transient, risultati WP_Query) vengono servite dalla RAM riducendo drasticamente il carico su MySQL.
Configurazione wp-config.php
Aggiungi le seguenti costanti al file wp-config.php, prima della riga /* That's all, stop editing! */:
/* Redis Object Cache */
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'tua-password-redis');
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PREFIX', 'wp_tuosito_');
define('WP_REDIS_MAXTTL', 86400); // 24 ore
Il parametro WP_REDIS_PREFIX è fondamentale se hai più installazioni WordPress sullo stesso server Redis: ogni sito deve avere un prefisso univoco per evitare collisioni di chiavi. In alternativa, usa WP_REDIS_DATABASE con un numero diverso per ogni sito (Redis supporta 16 database, da 0 a 15).
Plugin: Redis Object Cache
Il plugin Redis Object Cache (di Till Krüss) è lo standard per WordPress. Fornisce il drop-in object-cache.php che sostituisce il caching non persistente di default. Funziona con phpredis e Predis, supporta Redis 6/7/8 e Valkey.
Installazione:
- Installa e attiva il plugin da WordPress (o via WP-CLI:
wp plugin install redis-cache --activate) - Vai in Impostazioni → Redis e clicca Enable Object Cache
- Verifica che lo stato sia Connected
Per installazioni enterprise, Object Cache Pro (versione commerciale) offre connection pooling, compressione, prefetching, analytics e supporto multisite avanzato.
Comandi essenziali e monitoraggio
Il client CLI redis-cli è lo strumento principale per interagire con Redis. Verifica la connessione con un semplice ping:
redis-cli
127.0.0.1:6379> AUTH tua-password
OK
127.0.0.1:6379> PING
PONG
Comandi informativi
redis-cli INFO server # Versione, uptime, configurazione
redis-cli INFO memory # Utilizzo RAM, frammentazione, allocatore
redis-cli INFO clients # Connessioni attive, bloccate, in attesa
redis-cli INFO stats # Operazioni/sec, hit/miss ratio, eviction
redis-cli INFO replication # Stato replica master/slave
redis-cli INFO keyspace # Numero chiavi per database, TTL stats
Monitoraggio in tempo reale
# Mostra ogni comando eseguito in tempo reale (debug)
redis-cli MONITOR
# Statistiche di latenza
redis-cli --latency
# Diagnostica memoria (Redis 7+)
redis-cli MEMORY DOCTOR
# Scansiona le chiavi (non bloccante, a differenza di KEYS *)
redis-cli SCAN 0 COUNT 100
Nota: non usare mai KEYS * in produzione — è un comando bloccante che scansiona l’intero keyspace. Usa sempre SCAN con cursore per iterare le chiavi in modo non bloccante.
Cancellare la cache Redis
Comandi per la gestione della cache:
# Elimina TUTTE le chiavi da TUTTI i database
redis-cli FLUSHALL
# Elimina tutte le chiavi dal database corrente
redis-cli FLUSHDB
# Elimina le chiavi di un database specifico
redis-cli -n 2 FLUSHDB
# Versione asincrona (non bloccante, Redis 6+)
redis-cli FLUSHALL ASYNC
Da Redis 6 in poi, i comandi FLUSHALL ASYNC e FLUSHDB ASYNC eseguono la cancellazione in background senza bloccare il server — preferibili in produzione.
Se usi WordPress con il plugin Redis Object Cache, puoi svuotare la cache anche dalla dashboard WordPress (Impostazioni → Redis → Flush Cache) o via WP-CLI:
wp redis flush
Nginx FastCGI Cache vs Redis Object Cache
Questi due sistemi di caching operano a livelli diversi dello stack e non sono mutuamente esclusivi. In molte configurazioni di produzione si usano entrambi in modo complementare.
| Caratteristica | FastCGI Cache (Nginx) | Redis Object Cache |
|---|---|---|
| Cosa cachea | L’intera risposta HTTP (pagina completa) | Singoli oggetti: query DB, transient, option |
| Dove opera | A livello di web server, prima di PHP | A livello applicativo, dentro PHP/WordPress |
| Velocità | Estrema — Nginx serve direttamente dal disco/RAM senza toccare PHP | Molto veloce — elimina query al DB, ma PHP deve comunque eseguire |
| Granularità | Tutto-o-niente per URL | Granulare: ogni singola query/opzione è cacheable |
| Multi-server | Locale al singolo server | Condivisibile tra più server nel cluster |
| Utenti loggati | Richiede bypass o segmentazione | Funziona trasparentemente per tutti gli utenti |
Raccomandazione pratica: su un singolo server con WordPress, usa FastCGI Cache per le pagine pubbliche (visitatori non loggati) e Redis Object Cache per le pagine dinamiche (admin, utenti loggati, WooCommerce). In un’architettura multi-server, Redis è indispensabile perché consente di condividere lo stato della cache tra tutti i nodi del cluster.
Rimuovere Redis
Se necessario, la disinstallazione è pulita e rapida:
# Ferma e disabilita il servizio
sudo systemctl stop redis-server
sudo systemctl disable redis-server
# Rimuovi i pacchetti
sudo apt purge --auto-remove redis-server -y
sudo apt purge --auto-remove php8.3-redis -y
# Rimuovi l'utente di sistema (se presente)
sudo deluser redis
# Rimuovi i file di configurazione residui
sudo rm -rf /etc/redis /var/lib/redis /var/log/redis
Se usi WordPress, disattiva prima il plugin Redis Object Cache e rimuovi il drop-in object-cache.php dalla cartella wp-content/ prima di disinstallare Redis dal server.
Articoli correlati
Autore
Mi chiamo Giovanni Sacheli e dal 2009 aiuto le aziende a farsi trovare online. Sono specializzato in SEO tecnica e PPC, competenze che applico quotidianamente nella mia agenzia, Searcus Swiss Sagl. Mi piace sviluppare strumenti a supporto del mio lavoro, ho creato SEOdata.app e cluster.army e co-scritto il libro SEO Audit Avanzato. Curo maniacalmente questo blog per colleghi e appassionati, dove mi "appunto" quello che imparo. Sono un NERD anni '80, motociclista e orgoglioso papà di due bambini.
Link:
Giovanni Sacheli
SEO Audit Avanzato
Searcus Swiss Sagl
SEOdata.app
cluster.army