Introdução ao Redis no Node.js
A escalabilidade e a eficiência são considerações cruciais na construção de uma aplicação Web. Para garantir que a aplicação Web é capaz de lidar com quantidades crescentes de tráfego e ter um desempenho ótimo, devem ser tidos em conta vários princípios e conceitos durante o processo de desenvolvimento.
O Redis é uma tecnologia altamente eficaz que pode contribuir significativamente para a otimização do desempenho das aplicações Web. Com um conjunto de capacidades impressionantes, permite elevar o funcionamento de qualquer aplicação Web.
O Redis é um armazenamento de estruturas de dados na memória que pode ser utilizado como base de dados, cache e corretor de mensagens. Ele suporta várias estruturas de dados, como strings, hashes, listas, conjuntos e muito mais. Para utilizar o Redis com aplicativos Web do Node.js, é possível instalar o pacote “redis” via npm, exigi-lo no código do aplicativo, criar uma instância de cliente para se conectar ao servidor Redis e, em seguida, usar os vários métodos fornecidos pela biblioteca de cliente Redis para interagir com o Redis.
O que é o Redis e quando você deve usá-lo?
O Redis é uma plataforma versátil e de código aberto que facilita o armazenamento de dados na forma de pares chave-valor dentro de uma estrutura de memória. A sua adaptabilidade permite-lhe funcionar não só como um simples armazenamento de valores-chave, mas também como uma fila de trabalho, base de dados, cache, gestor de sessões ou intermediário de mensagens, entre outras possibilidades.
O Redis possui uma velocidade excecional, adaptabilidade e facilidade de utilização, o que o torna um recurso indispensável para a comunidade de desenvolvimento de software.
Quando você deve usar o Redis?
É aconselhável ter cuidado ao utilizar o Redis, pois ele é particularmente adequado para uma variedade de aplicações; no entanto, sua utilização deve ser limitada a instâncias em que seja pragmático fazê-lo.
Em situações em que é desejável empregar um armazenamento de estrutura de dados na memória de alto desempenho para lidar com dados estruturados e não estruturados, pode-se considerar a utilização do Redis.
O Redis, uma forma incessantemente prevalecente de mecanismo de cache, tem sido amplamente adotado como um meio de mitigar a carga sobre os sistemas de bases de dados e melhorar a eficiência operacional global, armazenando temporariamente dados frequentemente acedidos no seu próprio espaço de armazenamento, reduzindo assim a frequência das requisições feitas à fonte primária sem comprometer a consistência ou integridade dos dados.
A gestão de sessões pode ser realizada sem esforço através da utilização do Redis, uma vez que fornece um meio eficiente de armazenar e manter sessões de utilizadores para efeitos de autenticação e preservação do estado.
O Redis fornece um mecanismo para armazenar dados temporariamente, conhecido como “time-to-live” ou TTL.Esta funcionalidade permite aos utilizadores definir um tempo de expiração para os dados armazenados, após o qual estes são automaticamente eliminados. Essa funcionalidade pode ser útil em cenários em que dados temporários precisam ser armazenados, como na implementação de sistemas de autenticação baseados em tokens (por exemplo, JSON Web Tokens), no gerenciamento de filas de trabalho ou no armazenamento de dados em cache com uma vida útil limitada.
Outras situações em que a utilização do Redis pode ser vantajosa incluem empregá-lo como um corretor de mensagens, melhorar o desempenho das operações de banco de dados e armazenar e recuperar com eficiência tipos de dados estruturados, como listas, conjuntos e hashes.
Como usar o Redis com o Node.js
O Node.js é uma plataforma estimada para a construção de aplicativos robustos e versáteis do lado do servidor, favorecida por muitos desenvolvedores devido à sua eficiência e escalabilidade inabaláveis. Para maximizar estas qualidades, pode ser vantajosamente utilizado em conjunto com tecnologias complementares, como o Redis, que facilitam um desempenho e uma escalabilidade excepcionais.
O Redis é uma tecnologia versátil que pode ser utilizada com várias linguagens de programação, incluindo PHP, Golang e Node.js. Ele oferece soluções eficientes de armazenamento de dados para essas linguagens, permitindo que os desenvolvedores criem aplicativos robustos com facilidade. Além disso, existem vários clientes Redis disponíveis para diferentes plataformas, como o node-redis e o ioredis, que são escolhas populares entre os utilizadores do Node.js.
Os pacotes acima mencionados podem ser acedidos através do Gestor de Pacotes Node (npm), sendo a facilidade de utilização a sua principal caraterística. No entanto, existe uma discrepância entre eles, uma vez que o node-redis é o cliente oficialmente aprovado, enquanto a comunidade se inclina para o ioredis.
Conectando ao Redis a partir do Node.js
Para começar, você deve ter o Redis instalado em seu computador e um ambiente de desenvolvimento Node.js configurado. Confira o guia de instalação em Redis.io para instalar o Redis no Linux, macOS e Windows.
A instalação de um kit de desenvolvimento de software (SDK) cliente do Redis é necessária para estabelecer comunicação com o Redis. Para acomodar suas preferências, recomendamos utilizar um dos seguintes métodos para instalar o cliente Redis:
npm install redis --save
npm install ioredis --save
O comando inicial executa a instalação do node-redis, enquanto a diretiva subsequente realiza a instalação do ioredis.
Para configurar o seu cliente recentemente instalado, é crucial confirmar que o Redis está operacional. Isto pode ser conseguido lançando a interface de linha de comando para o Redis, conhecida como “redis-cli”, a partir do seu terminal.
O comando “ping” é utilizado para verificar a operacionalidade de um servidor, com a resposta “PONG” aparecendo na interface de linha de comando (CLI), significando que o servidor está funcionando corretamente. Para estabelecer uma ligação com o Redis, crie um ficheiro “redis.js” dentro do seu projeto Node e incorpore o seguinte código para definir a configuração:
const redis = require("redis")
// initialize using default config
const RedisClient = redis.createClient()
const connectRedis = async () => {
// connect to redis
await RedisClient.connect()
// handle error
RedisClient.on('error', (err) => {
console.error(`An error occurred with Redis: ${err}`)
})
console.log('Redis connected successfully...')
}
O segmento de código acima mencionado instiga o estabelecimento de um novo cliente Redis dentro da aplicação, utilizando a funcionalidade createClient fornecida pelo pacote redis, onde se pode especificar os parâmetros preferidos para configurar a conetividade do cliente com o servidor Redis.
As informações acima mencionadas podem ser expressas de forma mais refinada da seguinte forma: Ao iniciar a aplicação, tem a opção de fornecer detalhes específicos sobre o anfitrião, a porta, o nome de utilizador, a palavra-passe ou a cadeia de ligação, ou utilizar as predefinições. Especificando “node-redis” como o nome da aplicação, esta iniciará a operação no endereço IP localhost predefinido da máquina local na porta 6379, empregando a configuração padrão.
A função
createClient
é versátil e pode ser utilizada de várias maneiras, como evidenciado pelos seguintes exemplos:
// using connection string
const RedisClient = redis.createClient("rediss://127.0.0.1:6379")
// using parameter object
const RedisClient = redis.createClient({
socket: {
host: "127.0.0.1",
port: "6379"
},
username: "your redis username",
password: "your password"
})
É imperativo utilizar instâncias Redis seguras no seu ambiente de produção, empregando uma cadeia de URL segura para ligação ou aderindo aos parâmetros mencionados anteriormente. Deve-se observar que informações confidenciais, como credenciais, não devem ser incluídas no código e, em vez disso, devem ser armazenadas usando variáveis de ambiente.
Executando operações básicas do Redis no Node.js
O código mencionado acima estabelece uma conexão com o Redis utilizando a função connectRedis mencionada acima e ilustra várias tarefas fundamentais que podem ser executadas no Redis por meio de aplicativos Node.js.
const testRedis = async () => {
await connectRedis()
// Set and retrieve a value
await RedisClient.set("name", "Timmy")
const getCommand = await RedisClient.get("name")
console.log(getCommand)
// Delete values immediately or schedule them to expire
// in a number of seconds
await RedisClient.del("name");
await RedisClient.setEx("location", 60, "Lagos")
// Push onto the front or back of a list
await RedisClient.lPush("days", "monday")
await RedisClient.rPush("days", "tuesday")
await RedisClient.lPush("days", "wednesday")
const daysArray = await RedisClient.lRange("days", 0, -1)
// prints [ 'wednesday', 'monday', 'tuesday' ]
console.log(daysArray)
// Remove an item from the back or front of a list
await RedisClient.rPop("days")
await RedisClient.lPop("days")
const newDaysArray = await RedisClient.lRange("days", 0, -1)
// prints [ 'monday' ]
console.log(newDaysArray)
}
testRedis()
Note-se que a utilização de
async
e
await
é imperativa neste contexto. Isto deve-se ao facto de todas as funções serem executadas de forma assíncrona e devolverem promessas, pelo que, se forem necessários resultados imediatos, é crucial utilizar o mecanismo de
await
.
O código acima ilustra um exemplo elementar de operações que podem ser executadas numa aplicação Node.js utilizando o Redis. Há ainda uma infinidade de comandos e princípios a serem explorados.
A seção Comandos do Redis no README encontrado no repositório GitHub do nó-redis é um bom lugar para encontrar todos os outros comandos e o que eles fazem.
Use o Redis para criar aplicativos eficientes
O Redis é uma ferramenta poderosa que permite que os desenvolvedores criem aplicativos de alto desempenho do lado do servidor, utilizando seus recursos de armazenamento de dados na memória e um conjunto abrangente de estruturas e comandos de dados.
É altamente recomendável que você incorpore o Redis em seu próximo projeto de Node.