Redis
 sql >> Database >  >> NoSQL >> Redis

Come usare Redis da Node.js

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')