Lab 09: Redis & Node.js

Time: 30 minutes | Level: Advanced | Docker: docker run -it --rm node:20-alpine sh

Overview

Use Redis via ioredis: String/Hash/List/Set/ZSet operations, pipelining, pub/sub, Lua scripting, and Redis Streams with consumer groups.

Note: This lab requires a running Redis server. For local practice:

docker run -d --name redis -p 6379:6379 redis:7

The code examples are designed to be educational even without a live Redis instance.


Step 1: Setup & Connection

const Redis = require('ioredis');

// Single connection
const redis = new Redis({
  host: process.env.REDIS_HOST || 'localhost',
  port: process.env.REDIS_PORT || 6379,
  password: process.env.REDIS_PASSWORD,
  db: 0,
  retryStrategy(times) {
    const delay = Math.min(times * 50, 2000);
    return delay;
  },
  lazyConnect: false
});

redis.on('connect', () => console.log('Redis connected'));
redis.on('error', (err) => console.error('Redis error:', err.message));
redis.on('close', () => console.log('Redis disconnected'));

// Connection check
async function ping() {
  const result = await redis.ping();
  console.log('Ping:', result); // PONG
}

// Cluster connection
const cluster = new Redis.Cluster([
  { port: 7000, host: '127.0.0.1' },
  { port: 7001, host: '127.0.0.1' }
]);

Step 2: String Operations


Step 3: Hash Operations


Step 4: List, Set, ZSet Operations


Step 5: Pipeline & Multi (Transactions)


Step 6: Pub/Sub


Step 7: Lua Scripting & Redis Streams


Step 8: Capstone — Caching Pattern

Run verification (simulated Redis):

📸 Verified Output (simulated):


Summary

Data Type
Commands
Use Case

String

SET/GET/INCR/MSET

Simple values, counters, sessions

Hash

HSET/HGETALL/HINCRBY

Object storage (user profiles)

List

RPUSH/LPOP/BLPOP

Queues, recent items

Set

SADD/SMEMBERS/SINTER

Tags, unique members

ZSet

ZADD/ZRANGE/ZINCRBY

Leaderboards, rate limiting

Stream

XADD/XREAD/XGROUP

Event sourcing, message queues

Pipeline

redis.pipeline()

Batch multiple commands

Multi

redis.multi()

Atomic transactions

Pub/Sub

PUBLISH/SUBSCRIBE

Real-time messaging

Lua

redis.eval()

Complex atomic operations

Last updated