@nestjs-redis/throttler-storage
v0.12.1
Published
Redis storage for NestJS Throttler enabling distributed rate limiting across multiple application instances
Downloads
3,229
Maintainers
Readme
@nestjs-redis/throttler-storage
Redis-backed storage for NestJS Throttler enabling distributed rate limiting across instances.
Features
- Distributed rate limiting with Redis
- Drop-in replacement for in-memory storage
- Works with existing
@nestjs-redis/clientconnections - Client, Cluster, and Sentinel support
- Does not manage Redis connection lifecycle — pass an existing, managed client
Installation
Recommended: Install the complete toolkit
npm install @nestjs-redis/kit redisAlternative: Install throttler-storage package only
npm install @nestjs-redis/throttler-storage redisQuick Start
Note: Examples use
@nestjs-redis/kitimports (recommended). If you installed only this package, import from@nestjs-redis/throttler-storageand@nestjs-redis/clientinstead.
With existing Redis connection (Recommended)
import { Module } from '@nestjs/common';
import { ThrottlerModule, seconds } from '@nestjs/throttler';
import {
RedisModule,
RedisThrottlerStorage,
RedisToken,
} from '@nestjs-redis/kit';
@Module({
imports: [
RedisModule.forRoot({ options: { url: 'redis://localhost:6379' } }),
ThrottlerModule.forRootAsync({
inject: [RedisToken()],
useFactory: (redis) => ({
throttlers: [{ limit: 5, ttl: seconds(60) }],
storage: new RedisThrottlerStorage(redis),
}),
}),
],
})
export class AppModule {}Without existing Redis connection (Recommended)
If you do not otherwise use Redis in your application and want it only for throttler storage, you can declare the connection within the ThrottlerModule scope by importing RedisModule inside forRootAsync.
@Module({
imports: [
ThrottlerModule.forRootAsync({
imports: [
RedisModule.forRoot({ options: { url: 'redis://localhost:6379' } }),
],
inject: [RedisToken()],
useFactory: (redis) => ({
throttlers: [{ limit: 5, ttl: seconds(60) }],
storage: new RedisThrottlerStorage(redis),
}),
}),
],
})
export class AppModule {}Without existing Redis connection and without RedisModule
If you do not want to use RedisModule, create a client yourself and manage its lifecycle (connect/disconnect). RedisThrottlerStorage does not manage the lifecycle of the provided client.
@Module({
imports: [
ThrottlerModule.forRootAsync({
useFactory: async () => {
const redis = createClient({ url: 'redis://localhost:6379' });
await redis.connect();
return {
throttlers: [{ limit: 5, ttl: seconds(60) }],
storage: new RedisThrottlerStorage(redis),
};
},
}),
],
})
export class AppModule {}Links
- Root repo: CSenshi/nestjs-redis
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Contributing
Please see the root contributing guidelines.
License
MIT © CSenshi
