Introduzione
Sei un webmaster e vuoi rendere il tuo sito dinamico più veloce? Allora continua a leggere. In guide precedenti avevo parlato di applicativi in grado di rendere il web server più veloce, come OPCACHE e Memcached, oggi vediamo Redis. Redis in pratica fa le stesse cose di Memcached, ma è più recente e offre qualche funzionalità in più, inoltre il sito ufficiale è ben curato e ricco di informazioni.
Redis è un archivio open source (con licenza BSD), archivio di strutture di dati in memoria, utilizzato come database, cache e broker di messaggi. Supporta strutture di dati come stringhe, hash, elenchi, set, set ordinati con query di intervallo, bitmap, hyperloglog, indici geospaziali con query di raggio e flussi. Redis dispone di replica integrata, script Lua, LRU eviction, transazioni e diversi livelli di persistenza su disco e offre elevata disponibilità tramite Redis Sentinel e partizionamento automatico con Redis Cluster.
Redis diminuisce il tempo di caricamento delle pagine dei siti web dinamici basati su database mettendo in cache i dati richiesti e riducendo il carico sui server database. Redis in pratica è una cache per le query al database ed è noto per la sua flessibilità, prestazioni e ampio supporto linguistico. Il nome Redis deriva da REmote DIctionary Server.
In questa guida, imparerai ad installare e configurare Redis su un server Ubuntu 16.04 con PHP 7 e Nginx (con Apache è la stessa cosa). Ti serve l’accesso alla macchina con utente non root con privilegi sudo per eseguire le funzioni amministrative necessarie. Quando sei pronto per iniziare, accedi al tuo server Ubuntu con il tuo utente sudo.
Installare Redis
Installare Redis è semplicissimo e richiede al massimo 5 minuti. Aggiorna i file di indice dei pacchetti apt-get e aggiorna anche i pacchetti esistenti alle versioni più recenti utilizzando i seguenti comandi:
sudo apt-get update
sudo apt-get upgrade
I pacchetti Redis sono disponibili nel repository apt predefinito. Per l’installazione di Redis su un VPS Ubuntu esegui il comando dal terminale:
sudo apt-get install redis-server
Se devi usare Redis con PHP, devi anche installare l’estensione PHP di Redis sul tuo sistema Ubuntu. Esegui questo comando:
sudo apt-get install php-redis
Ora Redis può comunicare con PHP, il tuo web server ha tutti gli elementi necessari per rendere più rapido il caricamento delle pagine dinamiche. Il prossimo passo è abilitare Redis all’avvio del sistema. Riavvia il servizio Redis quando hai finito.
sudo systemctl enable redis-server.service
Configura Redis
Redis può essere avviato senza un file di configurazione utilizzando una configurazione predefinita integrata. Ma per apportare ulteriori modifiche ai parametri puoi usare il suo file di configurazione che trovi in:
/etc/redis/redis.conf
Modifica il file di configurazione di Redis in un editor di testo per apportare modifiche.
sudo vim /etc/redis/redis.conf
Aggiorna i seguenti valori nel file di configurazione di Redis in base alle tue esigenze. Puoi aumentare il limite massimo di memoria come disponibile sul tuo server.
maxmemory 256mb
maxmemory-policy allkeys-lru
La configurazione maxmemory-policy allkeys-lru dice a Redis di rimuovere qualsiasi chiave che usa l’algoritmo LRU quando viene raggiunta la memoria massima di 256mb. Salva il file di configurazione e riavvia il servizio Redis:
sudo systemctl restart redis-server.service
Verifica la connessione al server Redis
Utilizza il comando redis-cli per accedere alla CLI e verificare la connessione al server Redis con il comando ping.
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
Di seguito trovi altri comandi utili redis-cli. Per maggiori informazioni consulta la documentazione ufficiale.
redis-cli info # Informazioni sul server Redis
redis-cli info server # Info generali sul server Redis
redis-cli info clients #Info sulle connessioni dei client
redis-cli info memory # Info sull'utilizzo della memoria
redis-cli info persistence # Info sulla persistenza RDB e AOF
redis-cli info stats # Statistiche generali
redis-cli info replication # Info sulla replica Master/slave
redis-cli info cpu # Statistiche sull'utilizzo della CPU
redis-cli info commandstats # Statistiche sui comandi Redis
redis-cli info cluster # Info sul cluster Redis (se abilitato)
redis-cli info keyspace # Statistiche sulla scadenza delle chiavi nel database
Monitorare Redis
redis-cli monitor
MONITOR è un comando di debug che mostra il flusso di ogni comando elaborato dal server Redis. Può aiutare a capire cosa sta succedendo al database. Questo comando può essere utilizzato sia tramite redis-cli che tramite telnet. La capacità di vedere tutte le richieste elaborate dal server è utile al fine di individuare i bug in un’applicazione sia quando si utilizza Redis come database che come sistema di cache distribuito.
redis-cli
scan 0
Il comando redis-cli abilita la CLI (Command Line Interface), usando il comando scan 0 puoi vedere le chiavi salvate nel database Redis.
Cancellare la cache
Elimina tutte le chiavi da tutti i database Redis:
redis-cli FLUSHALL
Elimina tutte le chiavi del database Redis attualmente selezionato:
redis-cli FLUSHDB
Elimina tutte le chiavi del database Redis specificato:
redis-cli -n [numero database] FLUSHDB
Redis + WordPress
Se usi WordPress devi aggiungere la seguente riga all’inizio del file di configurazione wp-config.php, subito dopo l’apertura <?php.
define('WP_CACHE', true);
Infine, alla prima riga della sezione Salt Keys del file, aggiungi questo comando:
define('WP_CACHE_KEY_SALT', 'tuosito.com');
Come valore di WP_CACHE_KEY_SALT (tuosito.com nell’esempio sopra) inserisci quello che vuoi. Deve essere una chiave univoca per ogni installazione di WordPress su quel server. In questo modo sei sicuro che Redis lo gestisca correttamente. Ti consiglio di usare una chiave diversa per ogni dominio.
Sei pigro? Se non vuoi usare la shell per cancellare la cache puoi usare un plugin per WordPress, come ad esempio Redis Object Cache. Il plugin fornisce info sulla connessione al server ed un pulsante per cancellare la cache Redis. Con questo semplice plugin puoi anche avviare una funzione diagnostica per rilevare eventuali problemi.
Dashboard di controllo per Redis
Su GitHub ci sono un paio di dashboard da caricare sul server che permettono di gestire e monitorare Redis, le più note sono phpRedisAdmin e phpredmin.
Rimuovere Redis
Per rimuovere Redis la prima cosa da fare è interrompere il servizio e rimuovere l’avvio automatico:
sudo systemctl stop redis
sudo systemctl disable redis
Ora puoi rimuovere i due pacchetti installati:
sudo apt-get purge --auto-remove redis-server
sudo apt-get purge --auto-remove php-redis
Nel caso fosse presente un user Redis, puoi cancellarlo:
sudo deluser redis
Riavvia il server per concludere la disinstallazione di Redis:
sudo reboot
Nginx FastCGI-Cache vs Redis Object Cache
La differenza principale tra questi due sistemi è in ciò che viene memorizzato nella cache. L’uso di Redis con WordPress memorizzerà nella cache i risultati delle query comuni al database e accelererà la creazione delle pagine web. La cache FastCGI invece memorizza nella cache l’intera pagina dopo che è stata generata. Nessuno dei due è necessariamente migliore dell’altro in quanto è più una questione di ciò che funziona meglio per il tuo uso particolare. In entrambi i casi, è necessario utilizzare solo l’uno o l’altro, non entrambi.
La cache FastCGI è utile quando ci si trova in un ambiente a server singolo e non è necessario condividere la cache con altri server nel cluster. Può essere leggermente più veloce di Redis, a seconda della configurazione, ma è vantaggioso solo per il server che sta servendo le richieste e non è accessibile oltre quel server.
D’altra parte, Redis può essere configurato per funzionare con NGINX, configurato come modulo NGINX e utilizzato da NGINX, ed è accessibile da più di un singolo server. Pertanto, se si passa a un cluster e sorge la necessità di condividere i dati memorizzati nella cache su più server, connettersi a Redis dai server nel cluster risolve il problema.
Inoltre, Redis può essere installato su un server completamente separato (ovvero un server solo cache) che consente di separare il server cache dal proprio server Web. È possibile estendere Redis anche a un pool di cluster e frammentare i dati su più server ed essere comunque in grado di accedervi dal primario senza dover connettersi a ciascuno individualmente.
Concludendo, se hai un solo server, per semplicità, userei FastCGI Cache a meno che tu non abbia davvero bisogno di Redis. Se prevedi di configurare un cluster di server, Redis è un’opzione molto valide.
Risultati e prestazioni
Il web server che fa girare questo blog usa sia OPCACHE che Redis. I risultati sono soddisfacenti. Il tempo medio di download delle pagine segnalato da Google Search Console è inferiore a 0.3 secondi, ma spesso scende sotto i 0,2 secondi.
I tempi indicati da Google Analytics per documento caricato sono in media 2 secondi, sia da desktop (colonna sinistra) che da mobile (colonna a destra).
Screaming Frog riesce a scansionare circa 1.000 pagine del sito in 12 secondi.
Niente male.