Una delle librerie più popolari per lavorare con un server Redis da un'app Node.js è node-redis
, disponibile su https://github.com/NodeRedis/node-redis.
Installa la libreria nel tuo progetto:
npm install redis
Suggerimento:non dimenticare di eseguire prima npm init -y
se il progetto è nuovo di zecca e non hai un package.json
file già.
Connetti all'istanza Redis
Una volta installata la libreria, richiedila nel tuo progetto utilizzando
const redis = require('redis')
o
import redis from 'redis'
Una volta ottenuto il redis
oggetto, crea un nuovo client utilizzando
const client = redis.createClient({
url: 'redis://YOUR REDIS INSTANCE URL'
})
e connettiti usando (all'interno di una funzione asincrona):
await client.connect()
Una volta che hai il cliente, possiamo eseguire tutte le cose che sappiamo che Redis può fare.
Per chiudere la connessione, chiama:
client.quit()
Memorizza e recupera i valori chiave
Memorizza una coppia di valori chiave in redis usando set()
:
client.set("<key>", "<value>")
Esempio:
client.set("name", "Flavio")
client.set("age", 37)
Se esegui KEYS *
in redis-cli
su un server Redis pulito, vedrai apparire le due chiavi:
Puoi ottenere il valore memorizzato in una chiave usando get()
:
const value = await client.get("name")
Elimina una stringa chiave/valore utilizzando
client.del("names")
Lavorare con gli elenchi
In Redis possiamo lavorare con le liste usando il
LPUSH
RPUSH
LTRIM
LRANGE
comandi che abbiamo introdotto nel modulo Redis. Vengono mappati direttamente come client
metodi oggetto.
Crea un elenco usando
client.lPush('names', 'Flavio')
Sposta un nuovo elemento in fondo all'elenco:
client.rPush('names', 'Roger')
O in cima alla lista:
client.lPush('names', 'Syd')
Elenca tutti gli elementi in un elenco utilizzando:
const result = await client.lRange('names', 0, -1)
//result is [ 'Roger', 'Flavio', 'Syd' ]
Elimina elementi da un elenco utilizzando
client.rPop('names')
Elimina un elenco utilizzando
client.del('names')
Lavorare con i set
In Redis lavoriamo con i set usando
SADD
SPOP
SMEMBERS
.
e altri comandi Redis, che mappano direttamente come client
metodi oggetto.
Crea un set usando
client.sAdd('names', 'Flavio')
Aggiungi più elementi al set:
client.sAdd('names', 'Roger')
Puoi aggiungerne più contemporaneamente:
client.sAdd('names', 'Roger', 'Syd')
anche passando un array:
const names = ['Flavio', 'Roger', 'Syd']
client.sAdd('names', names)
Elenca tutti gli elementi di un set usando:
const names = await client.sMembers('names')
Rilascia un oggetto casuale da un set utilizzando:
client.sPop('names')
Aggiungi un secondo parametro per rilasciare più oggetti casuali:
client.sPop('names', 3)
Elimina un set utilizzando
client.del('names')
Lavorare con gli hash
In Redis lavoriamo con gli hash utilizzando una serie di comandi che includono
HMSET
HGETALL
HSET
HINCRBY
.
e altri comandi che abbiamo introdotto nel modulo Redis, che mappano direttamente come client
metodi oggetto.
Crea un hash usando
client.hSet('person:1', 'name', 'Flavio', 'age', 37)
Per ottenere tutte le proprietà di un utente, usa HGETALL:
const items = client.hGetAll('person:1')
Puoi aggiornare una proprietà hash utilizzando HSET:
client.hSet('person:1', 'age', 38)
Puoi incrementare un valore memorizzato in un hash usando HINCRBY:
client.hIncrBy('person:1', 'age', 1)
Elimina un hash utilizzando
client.del('person:1')
Abbonamenti
Gli abbonamenti sono una caratteristica straordinaria di Redis, che ci permette di fare cose davvero stravaganti in Node.js.
Un editore invia un messaggio su un canale. Più abbonati lo ricevono.
Iscriviti a un canale utilizzando
await subscriber.subscribe('dogs', (message) => {
console.log(message);
})
Pubblica su un canale utilizzando client.publish('<channel>', '<message>')
client.publish('dogs', 'Roger')
Tieni presente che non puoi pubblicare e iscriverti dallo stesso client
esempio.
Per farlo nella stessa app, crea 2 client:
const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })
await subscriber.subscribe('dogs', (message) => {
console.log(channel, message);
})
publisher.publish('dogs', 'Roger')