Il sistema di database Redis è diventato sempre più popolare negli ultimi anni. I prin­ci­pa­li vantaggi sono la velocità e la struttura semplice dei database. I dati vengono scritti di­ret­ta­men­te sulla memoria RAM del server e possono essere ri­chia­ma­ti molto più ve­lo­ce­men­te rispetto ad altri database. Ecco perché Redis è spesso uti­liz­za­to come cache sul web. Ma anche i servizi di mes­sag­gi­sti­ca uti­liz­za­no questo database per con­sen­ti­re una co­mu­ni­ca­zio­ne rapida. Vi spie­ghia­mo come in­stal­la­re il database Redis.

Passaggio 1: in­stal­la­re Redis

Redis è open source e può quindi essere scaricato, uti­liz­za­to e mo­di­fi­ca­to li­be­ra­men­te da tutti.

N.B.
Di seguito de­scri­via­mo come in­stal­la­re e con­fi­gu­ra­re Redis su Ubuntu. Tuttavia, è anche possibile lavorare con Mac o Windows. Se si desidera sem­pli­ce­men­te provare Redis, senza in­stal­la­re il sistema, si consiglia l’ambiente di test online Try Redis.

Il primo passo è scaricare Redis. A tale scopo usiamo il gestore di pacchetti di Ubuntu, che prima di tutto deve essere ag­gior­na­to.

sudo apt-get update
sudo apt-get install redis-server

In al­ter­na­ti­va i file possono essere scaricati dal sito web ufficiale di Redis. Si deve quindi scom­pat­ta­re il pacchetto ma­nual­men­te e infine in­stal­lar­lo. Dopodiché è possibile avviare Redis con un semplice comando.

redis-server

Per ve­ri­fi­ca­re se Redis funziona cor­ret­ta­men­te, è ne­ces­sa­rio avviare per prima l’in­ter­fac­cia che consente la co­mu­ni­ca­zio­ne con Redis.

redis-cli

Ora l’in­ter­fac­cia mostra l’indirizzo IP e la porta, su cui è eseguito Redis. Si può pertanto ef­fet­tua­re il ping.

127.0.0.1:6397> ping
PONG

Redis risponde, di­mo­stran­do così che il sistema di database è stato in­stal­la­to con successo. Si può inoltre ve­ri­fi­ca­re se è possibile in­tro­dur­re contenuti.

127.0.0.1:6397> set test "OK!"
127.0.0.1:6397> get test
"OK!"
N.B.
De­si­de­ra­te in­stal­la­re Redis sul vostro server? È possibile ri­di­men­sio­na­re i server cloud di IONOS anche per piccoli progetti.

Passaggio 2: con­fi­gu­ra­re Redis

Redis è stato in­stal­la­to in­nan­zi­tut­to con la con­fi­gu­ra­zio­ne standard, vi­sua­liz­za­bi­le tramite un comando.

127.0.0.1:6397> config get *

Nell’elenco di tutti gli elementi di con­fi­gu­ra­zio­ne le coppie sono sempre una sotto l’altra. Il punto “db­fi­le­na­me“ include quindi il valore “dump.rdb“. L’asterisco uti­liz­za­to per ri­chia­ma­re l’elenco è solo un se­gna­po­sto per un elemento par­ti­co­la­re della con­fi­gu­ra­zio­ne. Per esaminare ciò in modo specifico è possibile inserire il nome della voce al posto dell’asterisco. Si cerca sempre la parte superiore della coppia di con­fi­gu­ra­zio­ne, la chiave del valore associato.

127.0.0.1:6397> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

Per mo­di­fi­ca­re una voce nel file di con­fi­gu­ra­zio­ne si utilizza il comando set, che può essere usato, ad esempio, per impostare una password.

127.0.0.1:6397> config set requirepass "password"
OK

Se vogliamo ri­chie­de­re la password con get, ci viene chiesto prima di inserirla, dopotutto abbiamo appena eseguito il backup di Redis. A tal fine uti­liz­zia­mo il comando auth, quindi possiamo eseguire una query sulla voce di con­fi­gu­ra­zio­ne come descritto.

127.0.0.1:6397> auth "password"
127.0.0.1:6397> config get requirepass
1) "requirepass"
2) "password"
N.B.
Esistono altri modi per pro­teg­ge­re il database. Gli svi­lup­pa­to­ri hanno stilato una sintesi dei vari punti sul sito ufficiale.

Redis in realtà mantiene tutti i record in memoria. Tuttavia, per ottenere la per­si­sten­za è possibile creare uno snapshot del database sul disco fisso, me­mo­riz­za­to nel file dump.rdb.

127.0.0.1:6397> save

Abbiamo creato ma­nual­men­te uno snapshot uti­liz­zan­do il comando save. I backup possono anche essere au­to­ma­tiz­za­ti.

127.0.0.1:6397> save 60 10

In questo esempio abbiamo dato al comando due parametri: ora il sal­va­tag­gio avviene ogni 60 secondi, se durante questo periodo ci sono già state 10 modifiche.

Tuttavia, il comando save non è così utile nella modalità attiva perché impedisce ai client di accedere al database. Bgsave è più adatto perché questo processo è eseguito in back­ground.

Oltre alla versione dello snapshot esiste anche il file append-only. In questa modalità Redis salva ogni ope­ra­zio­ne eseguita in un file. Se il server Redis si arresta in modo im­pre­vi­sto, è possibile vedere ciò che è stato fatto per ultimo. Per attivare la modalità AOF è ne­ces­sa­rio apportare una modifica al file di con­fi­gu­ra­zio­ne.

127.0.0.1:6397> config set appendonly yes
Consiglio
Se avete bisogno della massima sicurezza dei dati dovreste creare si­ste­ma­ti­ca­men­te degli snapshot e attivare la modalità AOF. In questo modo pra­ti­ca­men­te nessun dato può andare perso. Tuttavia le ope­ra­zio­ni rendono cer­ta­men­te il database un po’ più lento.

Passaggio 3: creare voci

Dopo aver con­fi­gu­ra­to Redis è possibile lavorare con il database. A tale scopo si uti­liz­za­no diversi tipi di dati e comandi.

Stringhe

Le stringhe possono essere impostate più fa­cil­men­te uti­liz­zan­do il comando set.

N.B.
Non importa se si uti­liz­za­no o meno le vir­go­let­te quando si immettono valori. Per una migliore lettura del codice è possibile inserire il testo tra vir­go­let­te e spe­ci­fi­ca­re valori numerici senza tag.
127.0.0.1:6397> set foo "bar"
127.0.0.1:6397> set value 1

Se ora ri­chia­ma­te le voci foo e value con get saranno vi­sua­liz­za­ti i valori cor­ri­spon­den­ti.

127.0.0.1:6397> get foo
"bar"
127.0.0.1:6397> get value
"1"

Per eliminare una voce si usa il comando del.

127.0.0.1:6397> del foo
(integer) 1
127.0.0.1:6397> get foo
(nil)

Per evitare di creare molte voci con una riga di codice ag­giun­ti­va, potete uti­liz­za­re la funzione estesa mset. Per ri­chia­ma­re i valori di più voci con­tem­po­ra­nea­men­te, esiste in parallelo mget.

127.0.0.1:6397> mset foo1 "bar1" foo2 "bar2" foo3 "bar3"
OK
127.0.0.1:6397> mget foo1 foo2 foo3
1) "bar1"
2) "bar2"
3) "bar3"

Elenchi

Con Redis è possibile uti­liz­za­re anche altri tipi di dati. Ad esempio, elenchi e set sono popolari quando si lavora con il database. Entrambi sono raccolte di valori. Tuttavia, mentre i set non sono ordinati, i valori negli elenchi sono numerati. È possibile ag­giun­ge­re, in­ter­ro­ga­re ed eliminare voci negli elenchi.

127.0.0.1:6397> lpush mylist foo
(integer) 1
127.0.0.1:6397> lpush mylist bar
(integer) 2
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "bar"
127.0.0.1:6397> linsert mylist before "bar" "test"
(integer) 3
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "test"
3) "bar"
127.0.0.1:6397> lrem mylist 0 foo
(integer) 1
127.0.0.1:6397> lrange mylist 0 10
1) "test"
2) "bar"

In questo esempio abbiamo prima inserito due elementi in un elenco (lpush) e li abbiamo vi­sua­liz­za­ti. Il comando lrange specifica quale in­ter­val­lo (qui da 0 a 10) deve essere ri­pro­dot­to, in tal caso è possibile uti­liz­za­re anche numeri negativi. Quindi abbiamo inserito un altro valore davanti ad uno esistente con linsert (è possibile anche con after) e mo­di­fi­ca­to così la nu­me­ra­zio­ne. Il comando lrem consente di eliminare dall’elenco le voci con un valore specifico.

Compute Engine
La soluzione IaaS ideale per i tuoi carichi di lavoro
  • vCPU estre­ma­men­te van­tag­gio­se e potenti core dedicati
  • Massima fles­si­bi­li­tà senza periodo con­trat­tua­le minimo
  • Servizio di as­si­sten­za tecnica 24 ore su 24, 7 giorni su 7

Set

Redis prevede altri comandi per i set che danno risultati simili:

127.0.0.1:6397> sadd myset "foo"
(integer) 1
127.0.0.1:6397> sadd myset "bar"
(integer) 1 
127.0.0.1:6397> smembers myset 
1) "bar"
2) "foo"
127.0.0.1:6397> sismember myset "bar"
(integer) 1
127.0.0.1:6397> srem myset "bar"
(integer) 1
127.0.0.1:6397> smembers myset
1) "foo"

Con sadd è possibile includere con­tem­po­ra­nea­men­te più elementi nel set, se sono inseriti uno dopo l’altro nel comando. Per vi­sua­liz­za­re il set è suf­fi­cien­te il comando smembers e il nome del set de­si­de­ra­to. Usando il comando sismember si può anche cercare una voce specifica. Ana­lo­ga­men­te all’elenco, con srem è possibile eliminare singole voci.

Redis offre inoltre agli utenti la pos­si­bi­li­tà di uti­liz­za­re i set in un formato ordinato.

127.0.0.1:6397> zadd mysortedset 1 "foo"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "bar"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "foobar"
(integer) 1
127.0.0.1:6397> zrange mysortedset 0 10
1) "foo"
2) "bar"
3) "foobar"

In questa variante, il comando zadd e un punteggio si uti­liz­za­no per ag­giun­ge­re elementi. Mentre i valori stessi non possono apparire più volte, lo stesso numero può essere assegnato diverse volte nel punteggio. Il punteggio non è quindi una nu­me­ra­zio­ne diretta all’interno del set ma una pon­de­ra­zio­ne. Tutte le voci con un punteggio di 2 seguono gli elementi con un punteggio di 1. Con zrange è possibile vi­sua­liz­za­re tutte o solo le voci se­le­zio­na­te.

Hash

Il tipo di dati hash presenta una pe­cu­lia­ri­tà. Come per i set e gli elenchi, si tratta di singole voci che possono contenere più valori. Tuttavia, con­for­me­men­te alle coppie chiave-valore, esiste anche una chiave per ciascun valore.

127.0.0.1:6397> hset user1 name "bob" email "bob@example.com" password "rK87_x"
OK
127.0.0.1:6397> hget user1 name
1) "bob"
127.0.0.1:6397> hgetall user1
1) "name"
2) "bob"
3) "email"
4) "bob@example.com"
5) "password"
6) "rK87_x"
127.0.0.1:6397> hvals user1
1) "bob"
2) "bob@example.com"
3) "rK87_x"
127.0.0.1:6397> hkeys user1
1) "name"
2) "email"
3) "password"
> hdel user1 password
(integer) 1
127.0.0.1:6397> hgetall user1
1) "name"
2) "bob"
3) "email"
4) "bob@example.com"
127.0.0.1:6397> del user1
(integer) 1
127.0.0.1:6397> hgetall user1
(empty list or set)

In questo esempio con hset abbiamo creato un hash de­no­mi­na­to user1. L’hash ha tre campi. Usando il comando hget si può ottenere il valore di ogni campo se­pa­ra­ta­men­te. Per vi­sua­liz­zar­li tutti è possibile uti­liz­za­re hgetall. Ulteriori opzioni di query sono di­spo­ni­bi­li tramite hvals (mostra tutti i valori me­mo­riz­za­ti nell‘hash) e hkeys (mostra tutte le chiavi me­mo­riz­za­te nell’hash). I singoli campi possono essere eliminati con hdel, l’hash completo come al solito con del.

N.B.
Il comando flushall consente di eliminare tutte le voci del database.

Passaggio 4: ulteriori opzioni

Con Redis non solo è possibile inserire voci in un database, ma anche assegnare ai dati de­ter­mi­na­te proprietà. Ad esempio, l’in­gran­di­men­to o la riduzione in­cre­men­ta­le può essere molto utile.

127.0.0.1:6397> set foo 1
OK
127.0.0.1:6397> get foo
"1"
127.0.0.1:6397> incr foo
(integer) 2
127.0.0.1:6397> incr foo
(integer) 3
127.0.0.1:6397> get foo
"3"
127.0.0.1:6397> decr foo
(integer) 2
127.0.0.1:6397> get foo
"2"

Con queste funzioni è quindi possibile aumentare o diminuire i valori di uno. A volte, tuttavia, si desidera impostare valori che sono di­spo­ni­bi­li nel database solo per un de­ter­mi­na­to periodo di tempo. In questo caso si usa la funzione expire.

127.0.0.1:6397> set foo "bar"
OK
127.0.0.1:6397> expire foo 100
(integer) 1
127.0.0.1:6397> ttl foo
(integer) 50
127.0.0.1:6397> ttl foo
(integer) -50
127.0.0.1:6397> get foo
(nil)

Il comando expire richiede un periodo di tempo in secondi. In questo esempio abbiamo impostato la durata della voce su 100 secondi. Dopo metà del tempo, con il comando ttl abbiamo chiesto il time to live, ovvero il tempo rimanente. Se si aspetta ancora di più, l’in­ter­val­lo del TTL assume valore negativo. A questo punto la voce non esiste più.

Con il comando setex, una voce nel database può essere collegata a un TTL non appena creata.

127.0.0.1:6397> setex foo 100 "bar"
OK

La voce creata può anche essere espansa. Il comando append aggiunge un altro valore a quello me­mo­riz­za­to.

127.0.0.1:6397> set foo "Hello"
OK
127.0.0.1:6397> append foo " World"
(integer) 11
127.0.0.1:6397> get foo
"Hello World"
127.0.0.1:6397> set bar 5
OK
127.0.0.1:6397> append bar 10
(integer) 3
127.0.0.1:6397> get bar
"510"

Come si può vedere, quando si ri­chia­ma­no nuo­va­men­te i valori cor­ri­spon­den­ti, i nuovi com­po­nen­ti sono sem­pli­ce­men­te aggiunti al valore esistente. Se la voce non esiste ancora, append funziona esat­ta­men­te come set.

Inoltre è possibile anche ri­no­mi­na­re le voci usando il comando rename.

127.0.0.1:6397> set foo 100
OK
127.0.0.1:6397> rename foo bar
OK
127.0.0.1:6397> get foo
(nil)
127.0.0.1:6397> get bar
"100"
Consiglio
Esistono molti altri comandi per operare cor­ret­ta­men­te con Redis. Nella do­cu­men­ta­zio­ne ufficiale è possibile trovare tutti i comandi di­spo­ni­bi­li con una de­scri­zio­ne.
Vai al menu prin­ci­pa­le