- Learn
- Redis: la guida
- Hash
Hash
In Redis, è possibile utilizzare strutture dati associative, che permettono di realizzare ciò che in programmazione viene comunenemente definito dizionario o mappa: tali struttore prendono il nome di hash. Al loro interno, possiamo inserire valori associati ad una corrispondente chiave, che ne permette l’identificazione ed il recupero immediato. Ci riferiremo con il termine entry ad una coppia chiave/valore. Le chiavi devono essere assolutamente univoche, e vengono trattate in maniera case-sensitive. Pertanto, nome e Nome saranno considerate due chiavi distinte. Iniziamo una carrellata delle funzioni che Redis mette a disposizione per la gestione degli hash.
Inserimento di valori
Per creare un hash, è necessario inserirvi direttamente dei valori. Con la funzione HSET creiamo una entry fornendo tre dati: chiave dell’hash, chiave della entry e valore della entry. Supponiamo di voler rappresentare una pagella scolastica, e che un hash sia la struttura che abbiamo scelto a tale scopo. L’esempio è consono in quanto il nome di ogni materia può svolgere il ruolo di chiave per le entry, apparendo una sola volta:
> HSET pagella Italiano 8
(integer) 1
> HSET pagella Storia 7
(integer) 1
> HSET pagella Matematica 8
(integer) 1
> HSET pagella Geografia 7
(integer) 1
> HSET pagella Geografia 6
(integer) 0
Abbiamo inserito quattro entry. Ad ogni inserimento, abbiamo ricevuto in risposta il valore
1, che indica la creazione di una nuova chiave. Nell’ultimo caso, supponendo di aver fornito in prima
battuta un valore errato, abbiamo invocato nuovamente HSET
con chiave Geografia. In quest’ultimo
caso abbiamo ricevuto uno 0 come risultato, il che indica l’avvenuto aggiornamento di una
chiave già esistente.
In alternativa ad HSET
, si possono gestire gli inserimenti con HSETNX
che esegue l’inserimento solo se la chiave non esiste, non prevedendo la modalità di aggiornamento:
i risultati possibili sono 1 (successo) e 0 (fallimento, in quanto la mappa dispone già della stessa chiave).
Si può anche provvedere all’inserimento multiplo di valori con HMSET, che sarà seguito da un elenco di chiavi e rispettivi valori alternati. Continuando l’esempio di prima:
> HMSET pagella Biologia 8 Chimica 9
OK
Sono state create così le entry (Biologia,8) e (Chimica,9) mentre rimarranno invariate quelle inserite in precedenza. HMSET
permette
altresì l’aggiornamento di valori eventualmente preesistenti.
Lettura di valori
Per il recupero di un valore inserito, si può procedere con HGET al quale saranno fornite la chiave che contraddistingue l’hash e quella che contraddistingue la entry:
> HGET pagella Biologia
"8"
Per la lettura multipla esistono due alternative: HGETALL, che stampa sequenzialmente chiavi e valori alternandoli, e HMGET, che richiede un elenco di chiavi delle quali restituisce i valori:
> HGETALL pagella
1) "Italiano"
2) "8"
3) "Storia"
4) "7"
5) "Matematica"
6) "8"
7) "Geografia"
8) "7"
9) "Biologia"
10) "8"
11) "Chimica"
12) "9"
> HMGET pagella Italiano Storia
1) "8"
2) "7"
Gestione di chiavi e valori
Per gestire correttamente gli insiemi di entry, chiavi e valori è necessario saper svolgere una serie di operazioni che riportiamo qui di seguito in un elenco:
- numero di entry: per sapere quante entry abbiamo inserito nell’hash, invochiamo la funzione HLEN:
> HLEN pagella (integer) 6
- verifica dell’esistenza di una chiave: ci si può accertare se una chiave è stata impostata
utilizzando la funzione HEXISTS:
Il risultato sarà 1 in caso positivo (la chiave esiste) o 0 in caso negativo. Nell’esempio si evidenzia come le chiavi siano trattate in modalità case-sensitive;> HEXISTS pagella Italiano (integer) 1 > HEXISTS pagella italiano (integer) 0
- elencare tutte le chiavi: per avere un elenco completo delle chiavi inserite nell’hash,
si può ricorrere a HKEYS:
> HKEYS pagella 1) "Italiano" 2) "Storia" 3) "Matematica" 4) "Geografia" 5) "Biologia" 6) "Chimica"
- elencare tutti i valori: l’insieme dei valori possono essere recuperati con
la funzione HVALS:
> HVALS pagella 1) "8" 2) "7" 3) "8" 4) "7" 5) "8" 6) "9"
- cancellare una entry: per rimuovere una voce dell’hash si può usare il
comando HDEL:
La chiave Biologia è stata correttamente individuata e cancellata, come certificato dal valore 1 restituito. La materia Astrofisica, invece, non era presente nella pagella, e pertanto la risposta al comando è stata pari a 0.> HDEL pagella Biologia (integer) 1 > HDEL pagella Astrofisica (integer) 0
Valori contatore
Se in un hash conserviamo valori numerici destinati ad essere regolarmente incrementati o decrementati, possiamo gestirli con due specifiche funzioni: HINCRBY per soli numeri interi e HINCRBYFLOAT anche per numeri in virgola mobile. Per fare un esempio, immaginiamo di utilizzare un database Redis per conteggiare le visite che gli utenti effettuano al nostro sito. Ogni entry corrisponderà ad un utente e la sua username ne costituirà la chiave:
> HINCRBY visite papero98 1
(integer) 1
> HINCRBY visite papero98 1
(integer) 2
> HINCRBY visite papero98 1
(integer) 3
> HINCRBY visite papero98 1
(integer) 4
Il numero intero restituito corrisponde al valore attuale legato alla chiave dopo l’inserimento.
Hash come oggetti
Gli hash in Redis possono essere un ottimo modo per salvare in memoria oggetti nel senso
dato loro dalla Programmazione Orientata agli Oggetti: un’aggregazione di proprietà deputate
all’immagazzinamento di informazioni. Per salvare un oggetto in grado di rappresentare i dati di una
persona (nome, cognome, età, possesso di un’auto) potremmo ricorrere ad HMSET
per la raccolta simultanea di tutti i
dati di nostro interesse o HSET
per loro inserimenti singoli:
> HMGET persona1 nome Giulio cognome Rossi eta 25 automunito 1
Questo il contenuto dell’oggetto che abbiamo creato:
> HGETALL persona1
1) "nome"
2) "Giulio"
3) "cognome"
4) "Rossi"
5) "eta"
6) "25"
7) "automunito"
8) "1"
Man mano che si prende confidenza con le varie strutture dati di Redis e la loro integrazione reciproca, si apprezza meglio l’utilità degli hash come rappresentazione di oggetti ed il contributo di questa tecnica alla realizzazione di database articolati.
Se vuoi aggiornamenti su Database, NoSQL inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Caricare un oggetto dinamico tramite AJAX – parte 2
Per il caricamento di oggetti dinamici tramite AJAX è necessario l’utilizzo di Javascript: in uno script apposito, dichiariamo i due […]