Node.js
NodeJS con Redis
Ricerca…
Osservazioni
Abbiamo coperto le operazioni di base e più comunemente utilizzate in node_redis. Puoi utilizzare questo modulo per sfruttare tutta la potenza di Redis e creare app Node.js davvero sofisticate. Puoi creare molte cose interessanti con questa libreria come un forte livello di memorizzazione nella cache, un potente sistema di messaggistica Pub / Sub e molto altro. Per saperne di più sulla biblioteca, consultare la documentazione .
Iniziare
node_redis, come avrai intuito, è il client Redis per Node.js. È possibile installarlo tramite npm utilizzando il seguente comando.
npm install redis
Una volta installato il modulo node_redis, sei a posto. Creiamo un semplice file, app.js, e vediamo come connettersi con Redis da Node.js.
app.js
var redis = require('redis');
client = redis.createClient(); //creates a new client
Per impostazione predefinita, redis.createClient () utilizzerà 127.0.0.1 e 6379 rispettivamente come nome host e porta. Se hai un host / porta diverso, puoi fornirli come segue:
var client = redis.createClient(port, host);
Ora puoi eseguire qualche azione una volta stabilita una connessione. Fondamentalmente, devi solo ascoltare gli eventi di connessione come mostrato di seguito.
client.on('connect', function() {
console.log('connected');
});
Quindi, il seguente snippet va in app.js:
var redis = require('redis');
var client = redis.createClient();
client.on('connect', function() {
console.log('connected');
});
Ora, digitare l'app nodo nel terminale per eseguire l'app. Assicurati che il tuo server Redis sia attivo e funzionante prima di eseguire questo snippet.
Memorizzare coppie chiave-valore
Ora che sai come connetterti con Redis da Node.js, vediamo come memorizzare coppie chiave-valore nell'archivio Redis.
Memorizzazione di stringhe
Tutti i comandi di Redis sono esposti come funzioni differenti sull'oggetto client. Per memorizzare una stringa semplice usa la seguente sintassi:
client.set('framework', 'AngularJS');
O
client.set(['framework', 'AngularJS']);
I frammenti di cui sopra memorizzano una semplice stringa AngularJS rispetto al framework chiave. Dovresti notare che entrambi i frammenti fanno la stessa cosa. L'unica differenza è che il primo passa un numero variabile di argomenti mentre il successivo passa un array di argomenti alla funzione client.set()
. È inoltre possibile passare una richiamata opzionale per ricevere una notifica quando l'operazione è completata:
client.set('framework', 'AngularJS', function(err, reply) {
console.log(reply);
});
Se l'operazione non è riuscita per qualche motivo, l'argomento err
del callback rappresenta l'errore. Per recuperare il valore della chiave, procedi come segue:
client.get('framework', function(err, reply) {
console.log(reply);
});
client.get()
consente di recuperare una chiave memorizzata in Redis. È possibile accedere al valore della chiave tramite la risposta dell'argomento di richiamata. Se la chiave non esiste, il valore della risposta sarà vuoto.
Memorizzazione di hash
Molte volte la memorizzazione di valori semplici non risolverà il tuo problema. Sarà necessario memorizzare gli hash (oggetti) in Redis. Per questo è possibile utilizzare la funzione hmset()
come segue:
client.hmset('frameworks', 'javascript', 'AngularJS', 'css', 'Bootstrap', 'node', 'Express');
client.hgetall('frameworks', function(err, object) {
console.log(object);
});
Il frammento di cui sopra memorizza un hash in Redis che associa ogni tecnologia al suo framework. Il primo argomento su hmset()
è il nome della chiave. Gli argomenti successivi rappresentano coppie chiave-valore. Allo stesso modo, hgetall()
viene utilizzato per recuperare il valore della chiave. Se viene trovata la chiave, il secondo argomento del callback conterrà il valore che è un oggetto.
Si noti che Redis non supporta oggetti nidificati. Tutti i valori delle proprietà nell'oggetto verranno convertiti in stringhe prima di essere archiviati. È anche possibile utilizzare la seguente sintassi per memorizzare oggetti in Redis:
client.hmset('frameworks', {
'javascript': 'AngularJS',
'css': 'Bootstrap',
'node': 'Express'
});
È anche possibile passare una richiamata opzionale per sapere quando l'operazione è completata.
Tutte le funzioni (comandi) possono essere richiamate con equivalenti maiuscoli / minuscoli. Ad esempio, client.hmset()
e client.HMSET()
sono gli stessi. Memorizzazione delle liste
Se si desidera memorizzare un elenco di elementi, è possibile utilizzare gli elenchi di Redis. Per memorizzare un elenco, utilizzare la seguente sintassi:
client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
console.log(reply); //prints 2
});
Lo snippet sopra riportato crea un elenco chiamato framework e ne spinge due elementi. Quindi, la lunghezza della lista ora è due. Come puoi vedere ho passato un array di args
a rpush
. Il primo elemento della matrice rappresenta il nome della chiave mentre il resto rappresenta gli elementi della lista. Puoi anche usare lpush()
invece di rpush()
per spingere gli elementi a sinistra.
Per recuperare gli elementi della lista puoi usare la funzione lrange()
come segue:
client.lrange('frameworks', 0, -1, function(err, reply) {
console.log(reply); // ['angularjs', 'backbone']
});
Basta notare che si ottengono tutti gli elementi della lista passando -1 come terzo argomento di lrange()
. Se vuoi un sottoinsieme della lista, dovresti passare l'indice finale qui.
Memorizzare i set
I set sono simili agli elenchi, ma la differenza è che non consentono duplicati. Quindi, se non vuoi elementi duplicati nella tua lista puoi usare un set. Ecco come possiamo modificare il nostro snippet precedente per utilizzare un set anziché un elenco.
client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
console.log(reply); // 3
});
Come puoi vedere, la funzione sadd()
crea un nuovo set con gli elementi specificati. Qui, la lunghezza del set è tre. Per recuperare i membri del set, utilizzare la funzione smembers()
come segue:
client.smembers('tags', function(err, reply) {
console.log(reply);
});
Questo snippet recupererà tutti i membri del set. Basta notare che l'ordine non viene conservato durante il recupero dei membri.
Questa era una lista delle strutture dati più importanti trovate in ogni app alimentata da Redis. Oltre a stringhe, elenchi, insiemi e hash, è possibile memorizzare set ordinati, hyperLogLogs e altri in Redis. Se si desidera un elenco completo di comandi e strutture dati, visitare la documentazione ufficiale Redis. Ricorda che quasi ogni comando Redis è esposto sull'oggetto client offerto dal modulo node_redis.
Alcune operazioni più importanti supportate da node_redis.
Verifica dell'esistenza delle chiavi
A volte potrebbe essere necessario verificare se esiste già una chiave e procedere di conseguenza. Per fare ciò è possibile utilizzare la funzione exists()
come mostrato di seguito:
client.exists('key', function(err, reply) {
if (reply === 1) {
console.log('exists');
} else {
console.log('doesn\'t exist');
}
});
Cancellazione e scadenza delle chiavi
A volte è necessario cancellare alcune chiavi e reinizializzarle. Per cancellare i tasti, puoi usare il comando del comando come mostrato di seguito:
client.del('frameworks', function(err, reply) {
console.log(reply);
});
Puoi anche dare un tempo di scadenza a una chiave esistente come segue:
client.set('key1', 'val1');
client.expire('key1', 30);
Lo snippet sopra riportato assegna un tempo di scadenza di 30 secondi alla chiave key1.
Incremento e decremento
Redis supporta anche le chiavi di incremento e decremento. Per incrementare una chiave, utilizzare la funzione incr()
come mostrato di seguito:
client.set('key1', 10, function() {
client.incr('key1', function(err, reply) {
console.log(reply); // 11
});
});
La funzione incr()
incrementa un valore chiave di 1. Se è necessario incrementare di una quantità diversa, è possibile utilizzare la funzione incrby()
. Allo stesso modo, per decrementare un tasto è possibile utilizzare le funzioni come decr()
e decrby()
.