Redis Cache per Moodle: Ottimizzare le Prestazioni
Quando una piattaforma Moodle con migliaia di utenti attivi inizia a mostrare tempi di risposta superiori ai 3 secondi, la causa è quasi sempre il database sovraccaricato da query ripetitive. Redis Moodle è la soluzione più efficace per questo problema: un sistema di caching in-memory che memorizza i dati più richiesti nella RAM del server, eliminando fino all'80% delle query al database. In questa guida tecnica spieghiamo come configurare Redis per Moodle, quali cache store assegnare e come misurare i miglioramenti ottenuti.
Perché Redis è la scelta migliore come cache LMS
Moodle supporta nativamente diversi backend di cache LMS: file system, database, Memcached, APCu e Redis. Tra questi, Redis si distingue per diverse ragioni tecniche:
- Velocità: Redis opera interamente in RAM con latenza di lettura inferiore a 1 ms. Rispetto alla cache su file system (10-50 ms per operazione) o database (5-20 ms), il miglioramento è di un ordine di grandezza
- Persistenza opzionale: a differenza di Memcached, Redis può salvare periodicamente i dati su disco (RDB snapshots o AOF log), evitando la perdita totale della cache al riavvio del servizio
- Strutture dati avanzate: Redis supporta stringhe, hash, liste, set e sorted set. Moodle sfrutta gli hash per raggruppare le cache entry per componente, rendendo l'invalidazione selettiva più efficiente
- Gestione delle sessioni: Redis è il backend raccomandato per le sessioni Moodle su installazioni multi-server, dove le sessioni su file system non funzionano correttamente con load balancer
- Single-threaded ma velocissimo: il modello single-threaded di Redis elimina i problemi di race condition e lock contention tipici di soluzioni multi-threaded
I benchmark su piattaforme Moodle reali mostrano risultati consistenti: riduzione del tempo di caricamento della dashboard da 2,8 secondi a 0,6 secondi, diminuzione del carico CPU del database del 55-70% e capacità di gestire il doppio degli utenti simultanei a parità di hardware.
Installazione e configurazione di Redis per Moodle
L'ottimizzazione prestazioni con Redis parte da un'installazione corretta. Su un server Ubuntu/Debian, i passaggi sono:
Installazione di Redis Server
L'installazione base richiede il pacchetto redis-server e l'estensione PHP redis. Su Ubuntu 22.04/24.04: apt install redis-server php-redis seguito da un riavvio di PHP-FPM. La configurazione di Redis si trova in /etc/redis/redis.conf, dove i parametri critici per l'uso con Moodle sono:
- maxmemory 512mb: limita la RAM utilizzata da Redis. Per piattaforme con 1.000-5.000 utenti, 512 MB sono generalmente sufficienti. Piattaforme enterprise possono richiedere 1-2 GB
- maxmemory-policy allkeys-lru: quando la memoria è piena, Redis elimina le chiavi meno recentemente utilizzate. Questa policy è ottimale per il caching
- bind 127.0.0.1: limita le connessioni al localhost. Su architetture multi-server, specificare l'IP interno del server Redis
- requirepass: impostare sempre una password, anche in ambienti interni, come ulteriore livello di sicurezza
- tcp-keepalive 300: mantiene attive le connessioni TCP per evitare timeout con Moodle
Configurazione in Moodle
La configurazione del Redis Moodle si effettua in Amministrazione del sito > Plugin > Caching > Configuration. I passaggi sono:
1. Nella sezione "Installed cache stores", aggiungere una nuova istanza Redis specificando server (127.0.0.1), porta (6379) e password. Il prefisso chiave (key prefix) è importante in ambienti dove più istanze Moodle condividono lo stesso server Redis: usare un prefisso univoco come "mdl_prod_".
2. Nella sezione "Store mapping", assegnare l'istanza Redis ai diversi tipi di cache. Questa è la fase più critica per l'ottimizzazione.
Mappatura ottimale delle cache per le prestazioni e-learning
Moodle utilizza tre livelli di cache, ciascuno con caratteristiche diverse. La configurazione ottimale per la performance e-learning prevede:
Application cache
Dati condivisi tra tutti gli utenti e persistenti tra le richieste. Include la cache delle stringhe di lingua, la configurazione dei plugin, le definizioni dei corsi e i template Mustache compilati. Assegnare a Redis: questo è il livello dove Redis produce il beneficio maggiore, eliminando migliaia di query al database per dati che cambiano raramente.
Session cache
Dati specifici della sessione utente, come il contenuto del carrello, le preferenze temporanee e lo stato di navigazione. Assegnare a Redis: fondamentale su installazioni con load balancer, dove le sessioni devono essere accessibili da qualsiasi web server.
Request cache
Dati validi solo per la durata della singola richiesta HTTP. Lasciare su APCu o static cache: questi dati vivono solo per millisecondi e il overhead di una chiamata di rete a Redis (anche se minimo) non giustifica l'uso per dati così effimeri.
Cache store specifiche ad alto impatto
Alcuni cache store meritano attenzione particolare per il loro impatto sulle performance:
- core/string: cache delle stringhe di lingua. Su piattaforme multilingua, questa cache può contenere 50.000+ entry. Su Redis, il caricamento della pagina migliora di 200-400 ms
- core/htmlpurifier: cache della sanitizzazione HTML. Riduce il carico CPU del 10-15% su pagine con molti contenuti HTML (forum, wiki, pagine corso)
- core/coursemodinfo: cache delle informazioni sui moduli corso. Critica per il caricamento della pagina corso, che è la pagina più visitata di Moodle
- core/groupdata: cache dei dati dei gruppi. Impatto significativo su piattaforme che utilizzano intensivamente i gruppi per separare coorti di studenti
Gestione delle sessioni Moodle con Redis
Oltre al caching, Redis è il backend raccomandato per le sessioni Moodle. La configurazione avviene nel file config.php di Moodle:
$CFG->session_handler_class = '\core\session\redis';
$CFG->session_redis_host = '127.0.0.1';
$CFG->session_redis_port = 6379;
$CFG->session_redis_auth = 'password_sicura';
$CFG->session_redis_prefix = 'mdl_sess_';
$CFG->session_redis_acquire_lock_timeout = 120;
$CFG->session_redis_lock_expire = 7200;
I vantaggi rispetto alle sessioni su file system sono molteplici: eliminazione dei problemi di lock dei file durante accessi concorrenti, scalabilità orizzontale con load balancer (tutte le istanze web leggono dalla stessa fonte), e pulizia automatica delle sessioni scadute senza bisogno di cron job dedicati. Su piattaforme con più di 500 utenti simultanei, le sessioni su file system generano latenza misurabile a causa del lock I/O, un problema che Redis elimina completamente.
Monitoraggio e troubleshooting di Redis in produzione
Una volta configurato, Redis richiede monitoraggio continuo per garantire le massime prestazioni:
redis-cli INFO fornisce statistiche dettagliate. I parametri chiave da monitorare sono:
- used_memory vs maxmemory: quando l'utilizzo supera l'85% del limite, è il momento di aumentare la maxmemory o ottimizzare le policy di eviction
- keyspace_hits vs keyspace_misses: il hit ratio dovrebbe essere superiore al 90%. Un valore inferiore indica che le cache si invalidano troppo frequentemente o che la maxmemory è insufficiente
- evicted_keys: un numero elevato di chiavi evitte indica che Redis non ha abbastanza memoria per il working set
- connected_clients: monitorare il numero di connessioni attive per prevenire esaurimento dei file descriptor
Strumenti come Redis Insight (GUI gratuita di Redis Ltd) o l'integrazione con Grafana tramite l'exporter Prometheus permettono un monitoraggio visuale continuo con alerting automatico.
L'implementazione di Redis è uno degli interventi con il miglior rapporto costo-beneficio per l'ottimizzazione di piattaforme Moodle. HIE Learning offre servizi specializzati di performance tuning per piattaforme e-learning, dalla configurazione di Redis alla ottimizzazione del database, dal caching multi-livello al capacity planning, garantendo tempi di risposta sotto il secondo anche con migliaia di utenti simultanei. Richiedi un assessment gratuito delle performance della tua piattaforma.
Domande frequenti
Cos'è Redis e perché migliora le prestazioni di Moodle?
Redis è un sistema di caching in-memory che memorizza i dati più frequentemente richiesti nella RAM del server. In Moodle, riduce drasticamente il carico sul database principale, eliminando fino all'80% delle query ripetitive e abbassando i tempi di risposta da secondi a millisecondi.
Quali sono i vantaggi di Redis rispetto ad altri sistemi di cache per Moodle?
Redis offre latenza di lettura inferiore a 1 ms, molto più veloce di cache su file system o database. Inoltre, fornisce persistenza opzionale su disco per evitare la perdita totale dei dati a differenza di Memcached, e supporta strutture dati avanzate per gestire sessioni e cache in modo più efficiente.
Quando è consigliabile implementare Redis per una piattaforma Moodle?
L'implementazione di Redis è fortemente consigliata quando una piattaforma Moodle con migliaia di utenti attivi inizia a mostrare tempi di risposta elevati (es. superiori ai 3 secondi) a causa di un database sovraccaricato da query ripetitive.
Redis può gestire le sessioni degli utenti in Moodle?
Sì, Redis è particolarmente adatto a gestire le sessioni degli utenti in Moodle grazie alla sua velocità e alla capacità di gestire strutture dati complesse. Memorizzare le sessioni in Redis alleggerisce ulteriormente il database e migliora l'esperienza utente durante la navigazione.