https://github.com/liaoliaots/nestjs-redis
Redis module for Nest framework (node.js). Support node-redis & ioredis.
https://github.com/liaoliaots/nestjs-redis
cluster healthchecks ioredis javascript nest nestjs node node-redis nodejs redis sentinel typescript
Last synced: 7 days ago
JSON representation
Redis module for Nest framework (node.js). Support node-redis & ioredis.
- Host: GitHub
- URL: https://github.com/liaoliaots/nestjs-redis
- Owner: liaoliaots
- License: mit
- Created: 2021-05-04T02:41:31.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-01-11T14:18:03.000Z (4 months ago)
- Last Synced: 2025-05-12T21:18:20.067Z (9 days ago)
- Topics: cluster, healthchecks, ioredis, javascript, nest, nestjs, node, node-redis, nodejs, redis, sentinel, typescript
- Language: TypeScript
- Homepage:
- Size: 3.96 MB
- Stars: 418
- Watchers: 5
- Forks: 75
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README

[![Downloads][downloads-shield]][downloads-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![License][license-shield]][license-url]
Nest Redis Module
Redis(ioredis & node-redis) module for Nest framework (node.js).
Explore the docs »
View Demos
·
Report Bug
·
Request Feature
Table of Contents
## About The Project
### Features
- **Both redis & cluster are supported**: You can also specify multiple instances.
- **Health**: Checks health of **redis & cluster** server.
- **Rigorously tested**: With 100+ tests and 100% code coverage.
- **Services**: Retrieves **redis & cluster** clients via `RedisManager`, `ClusterManager`.### Test coverage
| Statements | Branches | Functions | Lines |
| --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|  |  |  |  |## Getting Started
### Prerequisites
This lib requires **Node.js >=16.13.0**, **NestJS ^10.0.0**, **ioredis ^5.0.0**.
- If you depend on **ioredis 5** & **NestJS 10**, please use version **10** of the lib.
- If you depend on **ioredis 5** & **NestJS 9**, please use version **9** of the lib.
- If you depend on **ioredis 5**, **NestJS 7** or **8**, please use [version 8](https://github.com/liaoliaots/nestjs-redis/tree/v8.2.2) of the lib.
- If you depend on **ioredis 4**, please use [version 7](https://github.com/liaoliaots/nestjs-redis/tree/v7.0.0) of the lib.### Node-Redis
If you prefre [node-redis](https://github.com/redis/node-redis), check out [this guide](), but it is in working progress.
### Installation
```sh
# with npm
npm install @liaoliaots/nestjs-redis ioredis
# with yarn
yarn add @liaoliaots/nestjs-redis ioredis
# with pnpm
pnpm add @liaoliaots/nestjs-redis ioredis
```## Usage
- [Redis](/docs/latest/redis.md)
- [Usage](/docs/latest/redis.md)
- [Configuration](/docs/latest/redis.md#configuration)
- [Testing](/docs/latest/redis.md#testing)
- [Non-Global](/docs/latest/redis.md#non-global)
- [Auto-reconnect](https://luin.github.io/ioredis/interfaces/CommonRedisOptions.html#retryStrategy)
- [Unix domain socket](/docs/latest/redis.md#unix-domain-socket)
- [Cluster](/docs/latest/cluster.md)
- [Usage](/docs/latest/cluster.md)
- [Configuration](/docs/latest/cluster.md#configuration)
- [Testing](/docs/latest/cluster.md#testing)
- [Non-Global](/docs/latest/cluster.md#non-global)
- [Auto-reconnect](https://luin.github.io/ioredis/interfaces/ClusterOptions.html#clusterRetryStrategy)
- [Health Checks](/packages/redis-health/README.md)
- [Examples](/docs/latest/examples.md)
- [Redis Sentinel](/docs/latest/examples.md#sentinel)### Legacy
- version 7, [click here](/docs/v7)
- version 8, [click here](/docs/v8)## FAQs
### Circular dependency ⚠️
Click to expand
[A circular dependency](https://docs.nestjs.com/fundamentals/circular-dependency) might also be caused when using "barrel files"/index.ts files to group imports. Barrel files should be omitted when it comes to module/provider classes. For example, barrel files should not be used when importing files within the same directory as the barrel file, i.e. `cats/cats.controller` should not import `cats` to import the `cats/cats.service` file. For more details please also see [this github issue](https://github.com/nestjs/nest/issues/1181#issuecomment-430197191).
### "Cannot resolve dependency" error
Click to expand
If you encountered an error like this:
```
Nest can't resolve dependencies of the (?). Please make sure that the argument at index [] is available in the context.Potential solutions:
- If is a provider, is it part of the current ?
- If is exported from a separate @Module, is that module imported within ?
@Module({
imports: [ /* the Module containing */ ]
})
```Please make sure that the `RedisModule` is added directly to the `imports` array of `@Module()` decorator of "Root Module"(if `isGlobal` is true) or "Feature Module"(if `isGlobal` is false).
Examples of code:
```ts
// redis-config.service.ts
import { Injectable } from '@nestjs/common';
import { RedisModuleOptions, RedisOptionsFactory } from '@liaoliaots/nestjs-redis';@Injectable()
export class RedisConfigService implements RedisOptionsFactory {
createRedisOptions(): RedisModuleOptions {
return {
readyLog: true,
config: {
host: 'localhost',
port: 6379,
password: 'authpassword'
}
};
}
}
```### ✅ Correct
```ts
// app.module.ts
import { Module } from '@nestjs/common';
import { RedisModule } from '@liaoliaots/nestjs-redis';
import { RedisConfigService } from './redis-config.service';@Module({
imports: [
RedisModule.forRootAsync({
useClass: RedisConfigService
})
]
})
export class AppModule {}
```### ❌ Incorrect
```ts
// my-redis.module.ts
import { Module } from '@nestjs/common';
import { RedisModule } from '@liaoliaots/nestjs-redis';
import { RedisConfigService } from './redis-config.service';@Module({
imports: [
RedisModule.forRootAsync({
useClass: RedisConfigService
})
]
})
export class MyRedisModule {}
``````ts
// app.module.ts
import { Module } from '@nestjs/common';
import { MyRedisModule } from './my-redis.module';@Module({
imports: [MyRedisModule]
})
export class AppModule {}
```## Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request## License
Distributed under the MIT License. See `LICENSE` for more information.
## Acknowledgments
- [Full-Featured Redis Client - ioredis](https://github.com/luin/ioredis)
- [Official Redis Documentation](https://redis.io/)
- [Official Redis Docker Image](https://hub.docker.com/_/redis)[downloads-shield]: https://img.shields.io/npm/dm/@liaoliaots/nestjs-redis?style=for-the-badge
[downloads-url]: https://www.npmjs.com/package/@liaoliaots/nestjs-redis
[stars-shield]: https://img.shields.io/github/stars/liaoliaots/nestjs-redis?style=for-the-badge
[stars-url]: https://github.com/liaoliaots/nestjs-redis/stargazers
[issues-shield]: https://img.shields.io/github/issues/liaoliaots/nestjs-redis?style=for-the-badge
[issues-url]: https://github.com/liaoliaots/nestjs-redis/issues
[license-shield]: https://img.shields.io/npm/l/@liaoliaots/nestjs-redis?style=for-the-badge
[license-url]: https://github.com/liaoliaots/nestjs-redis/blob/main/LICENSE