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