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 primeironpm init -y
se o projeto for novo e você não tiver umpackage.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')