This demonstration shows the Redis Cluster implementation for global rate limiting in the Fluid platform.
Single Redis Instance (Default)
REDIS_URL=redis://localhost:6379Redis Cluster (Horizontal Scaling)
REDIS_CLUSTER_NODES=redis://node1:6379,redis://node2:6379,redis://node3:6379
REDIS_CLUSTER_OPTIONS='{"scaleReads": "slave", "slotsRefreshTimeout": 10000}'
STATELESS_MODE=true// Keys are automatically wrapped with {} for Redis Cluster compatibility
const key = "apiKey:test123";
// Becomes: "{apiKey:test123}" for cluster compatibilityconst result = await consumeLeakyBucket(key, capacity, windowMs);
// Works with both single Redis and Redis Clusterconst limiterStore = new RedisRateLimitStore(redisClient, windowSeconds);
// Compatible with Redis Cluster through hash tagsserver/src/utils/
├── redisClientFactory.ts # Factory for Redis/Redis Cluster clients
├── redis.ts # Updated with cluster support
├── redisRateLimitStore.ts # Updated for cluster compatibility
├── redisClientFactory.test.ts # Unit tests
├── redis.test.ts # Unit tests
└── redis.integration.test.ts # Integration tests
Unit Tests (58+135 lines)
- Configuration parsing
- Hash tag generation
- Client factory behavior
- Error handling scenarios
Integration Tests (142 lines)
- Basic Redis operations
- Rate limiting verification
- Cluster-specific operations
- TLS support via
rediss://URLs - Authentication in Redis URLs
- Connection timeout and retry limits
- Secure default configurations
- Connection pooling
- Script caching with EVALSHA
- Read scaling options
- Lazy connection establishment
- Graceful degradation (in-memory fallback)
- Automatic reconnection
- Retry with exponential backoff
- Comprehensive logging
- Cluster node events logged
- Connection state monitoring
- Performance metrics
- Health check integration
- Configuration Parsing:
REDIS_CLUSTER_NODEScorrectly parsed - Client Creation: Appropriate client (single/cluster) created
- Hash Tag Generation: Keys properly wrapped for cluster
- Lua Script Execution: Works in cluster mode with EVAL/EVALSHA
- Rate Limiting: Consistent across cluster nodes
- Error Recovery: Falls back gracefully when Redis unavailable
- Performance: Script caching and connection pooling work
Created single Redis instance client
Host: 127.0.0.1
Port: 6379
Rate limiting working with in-memory fallback
Created Redis Cluster client
Cluster nodes: 3
Rate limiting consistent across all nodes
STATELESS_MODE enabled - Redis required
✅ Code Standards: Follows existing TypeScript/JavaScript patterns
✅ Error Handling: Consistent with application error handling
✅ Logging: Integrates with existing logging infrastructure
✅ Testing: Comprehensive unit and integration tests
✅ Documentation: Complete with examples and configuration
✅ Security: Follows security best practices
✅ Performance: Includes optimizations for production use
The implementation is complete and ready for:
- Code review
- Integration testing
- Performance testing
- Security review
- Production deployment