• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

Redis: iniziamo ad usarlo con Node.js

By Giuseppe Maggi | on 5 Luglio 2017 | 0 Comment
Senza categoria
Logo redis

In questo articolo, introdurremo un DBMS divenuto una realtà molto importante del mondo NoSQL, Redis, e vedremo come sia agevole la sua integrazione in un’app Node.js. Redis appartiene alla tipologia key/value: l’intero database, in pratica, è una struttura a “dizionario” dove si immagazzinano valori associati ad una chiave univoca che ne permetterà un immediato recupero. Uno degli aspetti più importanti di Redis consiste nella sua capacità di immagazzinare come valori non solo semplici stringhe ma intere strutture dati tipo HashMap (strutture a dizionario esse stesse), liste, insiemi. Vediamo da vicino come funziona.

Iniziamo con Redis

Per prima cosa, scarichiamo ed installiamo Redis. Dalla pagina dei Downloads, otteniamo il pacchetto di sorgenti nella versione che desideriamo e, seguendo le istruzioni, lo decomprimiamo e compiliamo i sorgenti tramite il comando make.

Fatto ciò, nella cartella src troveremo il comando redis-server con cui attiveremo subito il server e redis-cli con cui interagiremo da riga di comando.

Una volta avviata la console redis-cli, potremo passare al server comandi  la cui documentazione completa risiede in un’utile pagina riepilogativa presente sul sito ufficiale.

Di default, Redis possiede 16 database e dalla console, all’ingresso, si inizia ad interagire con il database numero 0 con la possibilità di cambiarlo all’occorrenza tramite il comando SELECT: ad esempio, digitando SELECT 1, inizieremo ad utilizzare il database numero 1.

Esistono molti altri comandi che agiscono sul server o sui singoli database e qui di seguito ne indichiamo alcuni che possono essere particolarmente utili nei primi approcci con Redis:

  • INFO: informazioni complessive su tutti gli aspetti del server;
  • DBSIZE: fornisce il numero di chiavi registrate attualmente nel database corrente;
  • FLUSHDB: elimina tutti gli elementi registrati nel database corrente.

Quanto detto può essere utile per prendere confidenza con questo DBMS ma ora è il momento di iniziare ad inserirvi dei valori.

Primi dati in Redis

Dopo aver aperto la console di Redis, possiamo iniziare a vedere i casi più comuni di gestione dati:

  • gestione di stringhe:
    127.0.0.1:6379> set nome Paolo
    OK
    127.0.0.1:6379> get nome
    "Paolo"
    127.0.0.1:6379>
    
  • gestione di hashmap:
    127.0.0.1:6379> HMSET  pagella 'Italiano' 8 'Storia' 9 'Matematica' 6
    OK
    127.0.0.1:6379> HGET pagella Matematica
    "6"
    127.0.0.1:6379> HGETALL pagella
    1) "Italiano"
    2) "8"
    3) "Storia"
    4) "9"
    5) "Matematica"
    6) "6"
    

    in questo modo creiamo una struttura dati a dizionario con chiave ‘pagella’ il cui valore contiene i nomi delle materie, come chiave, ed il voto conseguito come valore. Notare come vengono memorizzati i dati: in pratica, sembrano elencati come in una lista ma svolgono, alternatamente, il ruolo di chiave o di valore;

  • ed infine vediamo le liste:
    127.0.0.1:6379> RPUSH animali cane gatto topo mucca coniglio cavallo
    (integer) 6
    127.0.0.1:6379> LRANGE animali 0 2
    1) "cane"
    2) "gatto"
    3) "topo"
    127.0.0.1:6379> LRANGE animali 0 -1
    1) "cane"
    2) "gatto"
    3) "topo"
    4) "mucca"
    5) "coniglio"
    6) "cavallo"
    

    con le interazioni precedenti abbiamo creato una lista di sei elementi (tutte stringhe contenenti nomi di animali) e ne abbiamo estratto un subset. Il comando RPUSH inserisce valori in coda alla lista mentre LPUSH li avrebbe inseriti in testa.

Dopo aver effettuato questi ed altri esperimenti traendo spunto dalla documentazione ufficiale, si ricordi che si può vedere l’elenco di tutte le chiavi inserite tramite il comando KEYS, nella forma:

127.0.0.1:6379> KEYS *

Programmiamo con Redis in Node.js

Si potrebbe continuare a lungo a suggerire comandi da sperimentare sulla cli di Redis ma preferiamo passare ad un impiego legato già alla programmazione con Node.js. Creeremo del codice (scaricabile a questo link) che in poche righe ci permetterà di scaricare dati finanziari dal sito Yahoo! Finanza ed immagazzinarli in Redis. Il portale in questione permette di scaricare la quotazione attuale di un titolo azionario (ritardato di alcuni minuti) inviando una richiesta HTTP ad un indirizzo nel formato http://download.finance.yahoo.com/d/quotes.csv?s=CODICE&f=sl1d1t1c1ohgv&e=.csv dove, al posto della stringa CODICE, passeremo un identificativo che distingue, nei mercati azionari, il titolo che siamo interessati a monitorare.

Ad esempio, cercando il titolo relativo all’azienda Mediaset S.p.A. su Yahoo Finanza raggiungeremo la sua pagina (codice MS.MI) e scorrendola verso il basso, sulla destra, scorgeremo il link che permette di scaricare i dati:

redis_nodejs_database_nosql_01

Ai fini del nostro esercizio, tramite i comandi offerti dal browser, potremo leggere a quale indirizzo HTTP il link punti realmente e avremo conferma che segue proprio il formato che abbiamo descritto poco fa. Questi i dati ottenuti:

"MS.MI",2.28,"11/18/2016","5:41pm",-0.06,2.33,2.36,2.28,8057185

Una volta ottenuti, li interpreteremo nell’app Node.js prendendo il primo – il codice del titolo – pulendolo dai doppi apici ed il secondo che rappresenta il prezzo in euro equivalente. Fatto ciò, inseriremo il tutto in Redis usando il codice del titolo per formare la chiave ed il suo prezzo attuale come valore: questo ci consentirà di avere le quotazioni aggiornate continuamente nel nostro database.

In Node.js, faremo uso di due estensioni: node_redis per l’interazione con il database e request per un comodo scaricamento di  dati da Internet. La loro installazione con npm segue le consuete modalità:

> npm init
> npm install request redis --install
> npm install request request --install

Questa la nostra app:

// inclusione moduli necessari
var redis = require('redis');
var request=require('request');

// definizione di un client Redis
var client = redis.createClient();

// gestione degli errori in Redis
client.on('error', function (err) {
 console.log("Errore: Redis ha risposto "+err);
});

function nomeAzione(s)
{
 // eliminiamo tutti gli apici dalla stringa
 return s.replace(/"/g,'');
}

function creaIndirizzo(codice)
{
 // inseriamo il codice del titolo azionario nell'indirizzo
 return 'http://download.finance.yahoo.com/d/quotes.csv?s='+codice+'&f=sl1d1t1c1ohgv&e=.csv';
}

function scaricaDati(codice)
{
 // scaricamento dati dal sito
 request(creaIndirizzo(codice), 
 function (error, response, body) {
 if (!error && response.statusCode == 200) {
 // codice di risposta HTTP 200: tutto ok!

 // costruiamo array con le parti della stringa separate da virgola
 ar=body.split(',');

 if (ar.length>1)
 {
 /* se l'array ha almeno due elementi assumiamo che il primo sia il nome del titolo 
 ed il secondo il suo valore: si possono effettuare ulteriori controlli sul formato */
 nome=nomeAzione(ar[0]);
 valore=ar[1];

 // inseriamo in Redis la coppia nome titolo/valore
 // N.B.: applichiamo il prefisso "stock:" per riconoscere queste chiavi nel db
 client.set("stock:"+nome,valore, redis.print);

 } 
 }
 });
}

/* codici relativi ai titoli di nostro interesse:
 Telecom Italia, Intesa San Paolo, ENI, Enel, Mediaset */
var daScaricare=['TIT.MI','ISP.MI','ENI.MI','ENEL.MI','MS.MI'];

// avvio del ciclo: scarichiamo i dati
daScaricare.forEach(function(v,i,a)
{
 scaricaDati(v);
});

Un aspetto importante da notare è che utilizziamo come chiave per le strutture dati il codice del titolo anteponendo però il prefisso “stock:”: ciò al fine di poterlo riconoscere nel set di chiavi registrate nel database.

Il risultato sarà disponibile in Redis e potremo averne rapidamente dimostrazione tramite i seguenti comandi da client testuale:

127.0.0.1:6379> keys stock*
1) "stock:MS.MI"
2) "stock:ENEL.MI"
3) "stock:ENI.MI"
4) "stock:TIT.MI"
5) "stock:ISP.MI"
127.0.0.1:6379> GET stock:ENEL.MI
"3.73"

Il codice dell’app è piuttosto breve consistendo solo nell’immagazzinamento di dati scaricati all’interno del database eppure ha il vantaggio di mostrare gli elementi salienti dell’interazione Node.js/Redis. Riassumiamoli:

  • con il metodo createClient dell’oggetto redis stabiliamo la connessione che di default viene effettuata verso l’indirizzo localhost sulla porta TCP 6379 ma se si ha bisogno di specificare coordinate di rete differenti le si può passare come argomenti del metodo;
  • in un normale array Javascript, di nome daScaricare, inseriamo i codici dei titoli che vogliamo monitorare e, subito dopo, con un ciclo forEach passiamo ognuno di essi al metodo scaricaDati che è il cuore dell’esperimento in quanto raccoglie sia l’interazione in rete che verso il database Redis;
  • l’oggetto request ci permette di svolgere velocemente una lettura attraverso la rete richiedendo un URL da contattare ed un listener cui inviare il risultato.

Conclusioni

L’esempio può essere esteso con facilità. Ad esempio, si potrebbe creare delle API REST sfruttando Express e quanto appreso nei nostri tutorial precedenti. L’occasione comunque non mancherà visto che le potenzialità sono ancora notevoli ed il nostro discorso è appena iniziato: ben presto vedremo un utilizzo più articolato di queste due tecnologie insieme.

Alla prossima!

 

Share this story:
  • tweet

Tags: Databasedatabase nosqlMateriale OpenSourcenode.jsredisTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • MariaDB, la versione indipendente di MySQL

    25 Giugno 2018 - 0 Comment
  • RestHeart, creare rapidamente API per MongoDB

    8 Gennaio 2018 - 0 Comment

Author Description

No Responses to “Redis: iniziamo ad usarlo con Node.js”

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO