Redis Pub/Sub is an in-memory messaging pattern for real-time, ephemeral events. It's ultra-fast but lacks persistence—use Redis Streams for durability.
Redis Pub/Sub Setup
# Install Redis
docker run -d --name redis -p 6379:6379 redis:latest
# Install ioredis
npm install ioredis
Publisher: Sending Events
const Redis = require('ioredis');
const redis = new Redis();
// Publish event to channel
const event = {
eventType: 'CommentAdded',
postId: 'p789',
userId: 'u123',
text: 'Great post!'
};
await redis.publish('comment-events', JSON.stringify(event));
Subscriber: Listening for Events
const Redis = require('ioredis');
const redis = new Redis();
// Subscribe to channel
await redis.subscribe('comment-events');
redis.on('message', (channel, message) => {
const event = JSON.parse(message);
console.log(`New comment on post ${event.postId}: ${event.text}`);
// await sendPushNotification(event);
});
Redis Streams for Persistence
// Add event to stream (persistent)
await redis.xadd(
'user-events',
'*', // auto-generate ID
'eventType', 'UserRegistered',
'userId', 'u123',
'email', 'user@example.com'
);
// Read from stream
const events = await redis.xread('STREAMS', 'user-events', '0');
events.forEach(([stream, messages]) => {
messages.forEach(([id, fields]) => {
console.log(`Event ${id}:`, fields);
});
});
Redis Pub/Sub Best Practices
- Use Streams for durability: Pub/Sub is fire-and-forget; Streams persist events
- Pattern subscriptions:
redis.psubscribe('user.*') for wildcard matching - Integrate with caching: Combine Pub/Sub with Redis caching for state + events
- Limitations: No ordering guarantees, no replay—not suitable for critical events