-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
backendbackend stuffbackend stuff
Description
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:
- Caching - Session data, stats (reduce DB load)
- Pub/Sub - Socket.IO message broker for horizontal scaling
- 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
- cacheSession(sessionId, data, ttl) - Cache active session
- getSessionCache(sessionId) - Retrieve cached session
- invalidateSessionCache(sessionId) - Clear cache
- checkRateLimit(key, limit, window) - Rate limit check
- 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-clior Redis Commander
Resources
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
backendbackend stuffbackend stuff