Skip to content

BE_4 - Redis and WebSocket Setup #10

@notjackl3

Description

@notjackl3

Summary

Set up Redis connections for caching, pub/sub, and rate limiting with utility functions for common operations.
[Estimated hours: 9-10]

Objectives

  • Configure three separate Redis client instances
  • Create utility functions for caching
  • Create utility functions for rate limiting
  • Add health check endpoint
  • Document Redis data structures in README

Description

Redis serves multiple purposes in AskEasy:

  1. Caching - Session data, stats (reduce DB load)
  2. Pub/Sub - Socket.IO message broker for horizontal scaling
  3. Rate Limiting - Prevent spam/abuse

Each purpose uses a separate Redis database (0, 1, 2) for isolation.

Technical Details

File Structure

src/lib/
├── redis.ts           # Client instances
├── cache.ts           # Caching utilities
├── rateLimit.ts       # Rate limiting utilities
└── redisKeys.ts       # Key naming conventions

Redis Clients

// Database 0: General caching
export const redisCache = new Redis(process.env.REDIS_URL, { db: 0 });

// Database 1: Pub/Sub (Socket.IO)
export const redisPubSub = new Redis(process.env.REDIS_URL, { db: 1 });

// Database 2: Rate limiting
export const redisRateLimit = new Redis(process.env.REDIS_URL, { db: 2 });

Key Utility Functions

  1. cacheSession(sessionId, data, ttl) - Cache active session
  2. getSessionCache(sessionId) - Retrieve cached session
  3. invalidateSessionCache(sessionId) - Clear cache
  4. checkRateLimit(key, limit, window) - Rate limit check
  5. incrementRateLimit(key, window) - Increment counter

Acceptance Criteria

  • Three Redis clients connect successfully on startup
  • Can set and get values from cache with TTL
  • Rate limit function correctly blocks after limit exceeded
  • Health check endpoint returns Redis connection status
  • Error handling for Redis connection failures (logs error, doesn't crash)
  • Documentation in README explains Redis structure
  • Can view Redis data using redis-cli or Redis Commander

Resources

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions