Comenzando con Redis en Node.js
Familiarícese con Redis y aprenda cómo optimizar sus aplicaciones de Node con este poderoso almacén de datos.
Cuando crea una aplicación web, debe asegurarse de que sea escalable y eficiente. Para ello, deberás tener en cuenta varios principios y conceptos.
Redis es una de las muchas tecnologías que pueden ayudar a mejorar el rendimiento de sus aplicaciones web. Ofrece características notables que puede utilizar para mejorar el rendimiento de cualquier aplicación web.
Entonces, ¿qué es exactamente Redis y cómo puedes empezar a usarlo con tus aplicaciones web Node.js?
¿Qué es Redis y cuándo debería usarlo?
Redis es un almacén de datos de valores clave, en memoria y de código abierto. Es una tecnología flexible que puede actuar como cola de trabajo, base de datos, caché, administrador de sesiones, intermediario de mensajes y más.
La combinación de velocidad, versatilidad y facilidad de uso de Redis lo convierte en una herramienta muy valiosa en el ecosistema de desarrolladores de software.
¿Cuándo debería utilizar Redis?
Redis se adapta bien a muchas tareas, pero debe tener cuidado de utilizarlo sólo cuando tenga sentido hacerlo.
Debería considerar usar Redis en estos escenarios:
- Almacenamiento en caché: Redis es la forma más popular de implementar un caché para ayudar a evitar la carga en las bases de datos y mejorar el rendimiento general.
- Gestión de sesiones: almacenar y administrar sesiones de usuario para autenticación y gestión de estado es muy fácil con Redis.
- Almacenamiento temporal de datos: Redis te permite almacenar datos y eliminarlos automáticamente después de un período de tiempo específico. Esto la convierte en una buena herramienta para almacenar datos temporales como tokens web JSON, colas de trabajos, etc.
Otros casos para los que debería considerar el uso de Redis incluyen la implementación de un intermediario de mensajes, la optimización de las operaciones de la base de datos e incluso el almacenamiento y acceso eficiente a estructuras de datos como listas, conjuntos y hashes.
Cómo utilizar Redis con Node.js
Node.js es una tecnología popular para crear aplicaciones del lado del servidor eficientes y escalables. Puede usarlo junto con tecnologías de soporte como Redis para obtener alto rendimiento y escalabilidad.
Redis admite varios idiomas. Puede usarlo para almacenar datos en PHP y existen excelentes clientes Redis para Golang. Los dos clientes Redis más populares para Node.js son node-redis y ioredis.
Ambos paquetes están disponibles a través de npm y son fáciles de usar. La principal diferencia es que node-redis es el cliente oficial, mientras que la comunidad recomienda ioredis.
Conexión a Redis desde Node.js
Para comenzar, debe tener Redis instalado en su computadora y un entorno de desarrollo Node.js configurado. Consulte la guía de instalación en Redis.io para instalar Redis en Linux, macOS y Windows.
Debe instalar el SDK de su cliente Redis preferido en su proyecto para poder conectarse a Redis. Dependiendo de sus preferencias (usaremos node-redis), ejecute cualquiera de los siguientes comandos para instalar el cliente Redis:
npm install redis --save
npm install ioredis --save
El primer comando instala node-redis, mientras que el segundo instala ioredis.
Para configurar su cliente recién instalado, debe asegurarse de que Redis se esté ejecutando. Puedes hacer esto simplemente iniciando redis-cli en tu terminal:
El comando ping hace ping al servidor para confirmar que se está ejecutando, y una respuesta PONG en la CLI significa que el servidor está funcionando bien. Ahora cree un archivo redis.js en su proyecto Node y escriba el siguiente código en él para configurar Redis:
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...')
}
El código anterior inicializa un nuevo cliente Redis en la aplicación. La función createClient del paquete redis le permite crear un cliente utilizando los parámetros especificados.
Puede especificar su host, puerto, nombre de usuario, contraseña o cadena de conexión, o utilizar los valores predeterminados. Por ejemplo, node-redis comenzará a ejecutarse en localhost, en el puerto 6379, de forma predeterminada.
A continuación se muestran un par de formas en las que puede utilizar la función createClient:
// 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"
})
Utilice instancias seguras de Redis en producción. Cuando este es el caso, tienes una cadena URL segura para la conexión o utilizas los parámetros que se muestran arriba. Cualquiera sea el caso, recuerde siempre mantener las credenciales fuera del código y utilizar variables de entorno en su lugar.
Realizar operaciones básicas de Redis en Node.js
El siguiente código se conecta a Redis usando la función connectRedis anterior y demuestra algunas operaciones básicas que puede realizar en Redis desde sus aplicaciones Node.
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()
Observe el uso de async y await aquí. Esto se debe a que todas las funciones se ejecutan de forma asincrónica y devuelven promesas, por lo que si necesita sus resultados de inmediato, es importante esperarlos.
El código anterior solo muestra algunas operaciones básicas que puede realizar en Redis desde una aplicación Node.js. Hay muchos más comandos y conceptos que vale la pena analizar.
La sección Comandos de Redis en el archivo README que se encuentra en el repositorio GitHub de node-redis es un buen lugar para encontrar todos los demás comandos y lo que hacen.
Utilice Redis para crear aplicaciones eficientes
Aprovechar el poder de Redis le permite, como desarrollador, crear aplicaciones del lado del servidor altamente eficientes. Con el almacenamiento de datos en memoria de Redis y las amplias estructuras de datos y comandos, las aplicaciones pueden lograr optimizaciones de rendimiento notables.
Definitivamente debería considerar integrar Redis en su próxima aplicación Node.js para potenciar el rendimiento de su aplicación y brindar una mejor experiencia de usuario.