Redis in NestJS: The RedisX Solution You Didn't Know You Needed
Source: Dev.to
Introduction
Tired of wrangling with multiple libraries for Redis operations in your NestJS app? Meet NestJS RedisX – an all‑in‑one toolkit for caching, locking, rate limiting, and more, all running off a single Redis connection. This reduces complexity and centralizes configuration.
Features
RedisX is built around a modular plugin system. Install only what you need:
@nestjs-redisx/cache– L1/L2 caching with stampede protection.@nestjs-redisx/locks– Distributed locks with auto‑renewal.@nestjs-redisx/rate-limit– Various rate‑limiting strategies.@nestjs-redisx/idempotency– Ensure request idempotency.@nestjs-redisx/streams– Event‑driven architecture support.@nestjs-redisx/metrics– Prometheus metrics integration.@nestjs-redisx/tracing– OpenTelemetry tracing support.
Installation
npm install @nestjs-redisx/core @nestjs-redisx/cache @nestjs-redisx/locks
Add any additional plugins you require in the same command.
Setup Example
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RedisModule } from '@nestjs-redisx/core';
import { CachePlugin } from '@nestjs-redisx/cache';
import { LocksPlugin } from '@nestjs-redisx/locks';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
RedisModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
plugins: [
CachePlugin.registerAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
l1: { enabled: true, maxSize: 1000, ttl: 60 },
defaultTtl: config.get('CACHE_TTL', 300),
}),
}),
new LocksPlugin({ retryAttempts: 3, retryDelay: 200 }),
],
useFactory: (config: ConfigService) => ({
clients: {
type: 'single',
host: config.get('REDIS_HOST', 'localhost'),
port: config.get('REDIS_PORT', 6379),
},
}),
}),
],
})
export class AppModule {}
Conclusion
RedisX provides a clean, unified approach to Redis integration in NestJS applications. No more juggling multiple connections—just focus on building great features. For more details, refer to the official documentation and the GitHub repository.