Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Como usar o Redis do Node.js


Uma das bibliotecas mais populares para trabalhar com um servidor Redis de um aplicativo Node.js é a node-redis , disponível em https://github.com/NodeRedis/node-redis.

Instale a biblioteca em seu projeto:
npm install redis

Dica:não se esqueça de executar primeiro npm init -y se o projeto for novo e você não tiver um package.json arquivo já.

Conectar-se à instância do Redis


Depois que a biblioteca estiver instalada, exija-a em seu projeto usando
const redis = require('redis')

ou
import redis from 'redis'

Depois de ter o redis objeto, crie um novo cliente usando
const client = redis.createClient({
  url: 'redis://YOUR REDIS INSTANCE URL'
})

e conecte usando (dentro de uma função assíncrona):
await client.connect()

Depois de ter o cliente, podemos realizar todas as coisas que sabemos que o Redis pode fazer.

Para encerrar a conexão, ligue:
client.quit()

Armazenar e recuperar valores-chave


Armazene um par de valores-chave no redis usando set() :
client.set("<key>", "<value>")

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

Se você executar KEYS * em redis-cli em um servidor Redis limpo, você verá as duas chaves aparecendo:



Você pode obter o valor armazenado em uma chave usando get() :
const value = await client.get("name")

Excluir uma string de chave/valor usando
client.del("names")

Trabalhando com listas


No Redis podemos trabalhar com listas usando o
  • LPUSH
  • RPUSH
  • LTRIM
  • LRANGE

comandos que introduzimos no módulo Redis. Eles mapeiam diretamente como client métodos de objetos.

Crie uma lista usando
client.lPush('names', 'Flavio')

Empurre um novo item para o final da lista:
client.rPush('names', 'Roger')

Ou no topo da lista:
client.lPush('names', 'Syd')

Liste todos os itens em uma lista usando:
const result = await client.lRange('names', 0, -1)
//result is [ 'Roger', 'Flavio', 'Syd' ]

Solte itens de uma lista usando
client.rPop('names')

Excluir uma lista usando
client.del('names')

Trabalhando com conjuntos


No Redis trabalhamos com conjuntos usando
  • SADD
  • SPOP
  • SMEMBERS .

e outros comandos Redis, que mapeiam diretamente como client métodos de objetos.

Crie um conjunto usando
client.sAdd('names', 'Flavio')

Adicione mais itens ao conjunto:
client.sAdd('names', 'Roger')

Você pode adicionar vários de uma só vez:
client.sAdd('names', 'Roger', 'Syd')

também passando um array:
const names = ['Flavio', 'Roger', 'Syd']
client.sAdd('names', names)

Liste todos os itens em um conjunto usando:
const names = await client.sMembers('names')

Solte um item aleatório de um conjunto usando:
client.sPop('names')

Adicione um segundo parâmetro para descartar vários itens aleatórios:
client.sPop('names', 3)

Excluir um conjunto usando
client.del('names')

Trabalhando com hashes


No Redis trabalhamos com hashes usando um conjunto de comandos que incluem
  • HMSET
  • HGETALL
  • HSET
  • HINCRBY .

e outros comandos que introduzimos no módulo Redis, que mapeiam diretamente como client métodos de objetos.

Crie um hash usando
client.hSet('person:1', 'name', 'Flavio', 'age', 37)

Para obter todas as propriedades de um usuário, use HGETALL:
const items = client.hGetAll('person:1')

Você pode atualizar uma propriedade de hash usando HSET:
client.hSet('person:1', 'age', 38)

Você pode incrementar um valor armazenado em um hash usando HINCRBY:
client.hIncrBy('person:1', 'age', 1)

Excluir um hash usando
client.del('person:1')

Assinaturas


As assinaturas são um recurso incrível do Redis, nos capacitando a fazer coisas realmente sofisticadas no Node.js.

Um editor envia uma mensagem em um canal. Vários assinantes o recebem.

Inscreva-se em um canal usando
await subscriber.subscribe('dogs', (message) => {
  console.log(message);
})

Publique em um canal usando client.publish('<channel>', '<message>')
client.publish('dogs', 'Roger')

Esteja ciente de que você não pode publicar e assinar do mesmo client instância.

Para fazer isso no mesmo aplicativo, crie 2 clientes:
const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })

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

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