Abbiamo accennato nelle lezioni precedenti alla configurazione di Redis. Data la sua importanza per la gestione del database, riprendiamo qui il discorso completandolo. Redis basa la sua configurazione su un file denominato redis.conf strutturato su una sintassi molto semplice: tante righe ognuna delle quali costituita da una parola chiave ed un elenco di parametri. La configurazione che diventa operativa nel server può essere fornita in vari modi:
- se avviamo il server senza fornire il path di un file redis.conf, viene caricata una configurazione di
default; - altrimenti, possiamo passare un file di configurazione personalizzato in fase di avvio del server. Nel seguente caso, avvieremo Redis recuperando la configurazione dal file myredis.conf:
> ./redis-server myredis.conf
- possiamo passare i parametri per personalizzare la configurazione al momento del lancio del server:
> sudo ./redis-server --port 6789
- possiamo fornire le impostazioni da standard input:
> sudo ./redis-server -
Dopo aver dato l'invio, si potranno passare parametri e valori fino alla pressione della combinazione di tasti Ctrl+D.
Un'opzione interessante è costituita dalla possibilità di fornire configurazioni a runtime senza la necessità di riavviare il
server: possiamo farlo con CONFIG SET mentre con
CONFIG GET ne andremo a recuperare i valori.
CONFIG SET richiede il nome della proprietà e l'elenco dei parametri che la valorizzeranno:
> CONFIG SET maxmemory 250MB
Con tale comando impostiamo la massima memoria a disposizione del database a 250MB (senza unità di misura la
dimensione viene intesa come numero di byte). Per averne conferma possiamo usare CONFIG GET:
> CONFIG GET maxmemory
1) "maxmemory"
2) "262144000"
Il cambio di configurazione è andato così in porto. L'utilità di tutto ciò sta nella mancata esigenza di
riavviare il server per poter acquisire le nuove configurazioni: possiamo immaginare quanto ciò sia utile sapendo
che servizi in esecuzione molto spesso non possono essere assolutamente interrotti in fase di produzione.
La funzione INFO
A proposito di configurazione, altra funzione già incontrata di sfuggita nelle precedenti lezioni è
INFO. Permette di verificare la configurazione attualmente attiva nonchè un
insieme di parametri che rivelano il corrente stato di lavoro di Redis. Ciò è utile a scopo informativo e, ancora di più, in fase di problem solving
per appurare le cause di eventuali malfunzionamenti. La funzione INFO
deve essere invocata seguita dal nome della
categoria di impostazioni cui siamo interessati. Eccone qui un elenco:
- server: contiene informazioni riguardanti il server in generale. Tra di esse, troveremo nome del
sistema operativo, versione di Redis in uso, tipo di architettura della macchina e porta TCP di ascolto; - clients: concerne tutto ciò che riguarda le connessioni dei client, in primis il numero di quelle attualmente
in corso; - memory: informazioni sul consumo di memoria;
- persistence: tutto ciò che riguarda il salvataggio dei dati su disco. Uno degli aspetti di maggiore interesse di
Redis è la varietà di modalità con cui esso può essere utilizzato: persistente, in memoria, finalizzato alla cache; - stats: sistema di statistiche generali del server. Contiene informazioni di ogni genere sull'accesso al database ma anche alla gestione del suo patrimonio informativo specificando chiavi attualmente in uso e risultati delle interrogazioni sviluppate;
- replication: configurazione riguardante la replica di un database master su uno o più secondari. In fase di
verifica di tali configurazioni, sarà possibile sapere se il server ha assunto il ruolo che avevamo pensato per lui
(master o slave) e come stia interagendo con il resto della rete; - cpu: statistiche riguardanti il consumo di CPU;
- commandstats: statistiche sull'uso dei comandi. Particolarmente interessante questa sezione se
si ha bisogno di sapere che tipi di operazioni vengono svolte dai client (inserimento di valori o lettura); - cluster: informazioni sull'eventuale uso di Redis in cluster;
- keyspace: statistiche relative ai database in uso.
Oltre a questo, esiste la possibilità di richiedere INFO all
per ottenere un flusso completo delle
informazioni di cui INFO dispone.
Scegliere un database
Sinora abbiamo utilizzato Redis semplicemente invocando la sua CLI e immettendo dati. Abbiamo trattato un pò
lo spazio che trovavamo come unico database esistente. In realtà, in un'installazione Redis ci sono sedici
database (numerati da 0 a 15) e quello che abbiamo sempre usato nelle lezioni precedenti non è altro che il numero 0, il primo.
Possiamo passare dall'uno all'altro con il comando SELECT. Facciamo qualche esempio.
Apriamo la CLI ed inseriamo due valori:
> SET nome "Giancarlo"
> SET numero 150
Tutto ciò è stato inserito nel database numero 0. Spostiamoci in un altro con SELECT
:
> SELECT 8
OK
Avendo cambiato database le chiavi appena inserite non saranno disponibili:
> KEYS *
(emty list or set)
> GET nome
(nil)
> GET numero
(nil)
Tornando però al database precedente troviamo nuovamente disponibili i valori di prima:
> SELECT 0
OK
> GET nome
"Giancarlo"
> GET numero
150
Possiamo terminare questo paragrafo vedendo come possa rilevarsi utile INFO
per monitorare l'utilizzo dei database.
Supponiamo di non avere dati presenti in nessun database e di svoglere le seguenti operazioni:
> SET nome "Gianluca"
OK
> SET citta "Roma"
OK
> SET numero 158
OK
> SET anno 2014
OK
> SELECT 4
OK
> SET citta "Napoli"
OK
> SET anno 2018
OK
> SET numero 221
OK
Si noti che inseriamo nel database iniziale (numero 0) quattro chiavi per poi passare al quinto database (numero 4)
in cui andiamo ad inserire altre tre chiavi. Possiamo avere una panoramica complessiva del database a disposizione mediante il
comando INFO
:
> INFO keyspace
# Keyspace
db0:keys=4,expires=0,avg_ttl=0
db4:keys=3,expires=0,avg_ttl=0
Le ultime due righe restituite forniscono, rispettivamente, informazioni sul database numero 0 (identificativo db0)
ed il database numero 4 (db4). Entrambi mostreranno mediante il parametro keys il numero di chiavi sinora esistenti rispecchiando i valori che ci aspettavamo.