sql >> Base de Datos >  >> NoSQL >> Redis

Cómo usar Redis desde Node.js

Una de las bibliotecas más populares para trabajar con un servidor Redis desde una aplicación Node.js es node-redis , disponible en https://github.com/NodeRedis/node-redis.

Instale la biblioteca en su proyecto:

npm install redis

Consejo:no olvide ejecutar primero npm init -y si el proyecto es nuevo y no tiene un package.json archivo ya.

Conectarse a la instancia de Redis

Una vez que la biblioteca esté instalada, solicítela en su proyecto usando

const redis = require('redis')

o

import redis from 'redis'

Una vez que tenga el redis objeto, cree un nuevo cliente usando

const client = redis.createClient({
  url: 'redis://YOUR REDIS INSTANCE URL'
})

y conéctese usando (dentro de una función asíncrona):

await client.connect()

Una vez que tenga el cliente, podemos realizar todas las cosas que sabemos que puede hacer Redis.

Para cerrar la conexión, llame a:

client.quit()

Almacenar y recuperar valores clave

Almacene un par de valores clave en redis usando set() :

client.set("<key>", "<value>")

Ejemplo:

client.set("name", "Flavio")
client.set("age", 37)

Si ejecuta KEYS * en redis-cli en un servidor Redis limpio, verá aparecer las dos claves:

Puede obtener el valor almacenado en una clave usando get() :

const value = await client.get("name")

Eliminar una cadena de clave/valor usando

client.del("names")

Trabajar con listas

En Redis podemos trabajar con listas usando el

  • LPUSH
  • RPUSH
  • LTRIM
  • LRANGE

comandos que introdujimos en el módulo Redis. Se mapean directamente como client métodos de objetos.

Crea una lista usando

client.lPush('names', 'Flavio')

Empuje un nuevo elemento al final de la lista:

client.rPush('names', 'Roger')

O en la parte superior de la lista:

client.lPush('names', 'Syd')

Enumere todos los elementos en una lista usando:

const result = await client.lRange('names', 0, -1)
//result is [ 'Roger', 'Flavio', 'Syd' ]

Soltar elementos de una lista usando

client.rPop('names')

Eliminar una lista usando

client.del('names')

Trabajar con conjuntos

En Redis trabajamos con conjuntos usando

  • SADD
  • SPOP
  • SMEMBERS .

y otros comandos de Redis, que se asignan directamente como client métodos de objetos.

Crea un conjunto usando

client.sAdd('names', 'Flavio')

Agregue más elementos al conjunto:

client.sAdd('names', 'Roger')

Puede agregar varios a la vez:

client.sAdd('names', 'Roger', 'Syd')

también pasando una matriz:

const names = ['Flavio', 'Roger', 'Syd']
client.sAdd('names', names)

Enumere todos los artículos en un conjunto usando:

const names = await client.sMembers('names')

Suelta un elemento aleatorio de un conjunto usando:

client.sPop('names')

Agregue un segundo parámetro para soltar varios elementos aleatorios:

client.sPop('names', 3)

Eliminar un conjunto usando

client.del('names')

Trabajando con hashes

En Redis trabajamos con hashes usando un conjunto de comandos que incluyen

  • HMSET
  • HGETALL
  • HSET
  • HINCRBY .

y otros comandos que presentamos en el módulo Redis, que se asignan directamente como client métodos de objetos.

Crea un hash usando

client.hSet('person:1', 'name', 'Flavio', 'age', 37)

Para obtener todas las propiedades de un usuario, use HGETALL:

const items = client.hGetAll('person:1')

Puede actualizar una propiedad hash usando HSET:

client.hSet('person:1', 'age', 38)

Puede incrementar un valor almacenado en un hash usando HINCRBY:

client.hIncrBy('person:1', 'age', 1)

Eliminar un hash usando

client.del('person:1')

Suscripciones

Las suscripciones son una característica sorprendente de Redis que nos permite hacer cosas realmente sofisticadas en Node.js.

Un editor envía un mensaje en un canal. Múltiples suscriptores lo reciben.

Suscríbete a un canal usando

await subscriber.subscribe('dogs', (message) => {
  console.log(message);
})

Publicar en un canal usando client.publish('<channel>', '<message>')

client.publish('dogs', 'Roger')

Tenga en cuenta que no puede publicar y suscribirse desde el mismo client instancia.

Para hacerlo en la misma aplicación, cree 2 clientes:

const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })

await subscriber.subscribe('dogs', (message) => {
  console.log(channel, message);
})

publisher.publish('dogs', 'Roger')