Skip to content

Redis module for Nest framework (node.js). Support node-redis & ioredis.

License

Notifications You must be signed in to change notification settings

liaoliaots/nestjs-redis

Repository files navigation

NPM Version Downloads Stargazers Issues License

Nest Logo

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
  1. About The Project
  2. Getting Started
  3. Usage
  4. FAQs
  5. Roadmap
  6. Contributing
  7. License
  8. Acknowledgments

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
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 of the lib.
  • If you depend on ioredis 4, please use version 7 of the lib.

Node-Redis

If you prefre node-redis, check out this guide, but it is in working progress.

Installation

# 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

Legacy

FAQs

Circular dependency ⚠️

Click to expand

A 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.

"Cannot resolve dependency" error

Click to expand

If you encountered an error like this:

Nest can't resolve dependencies of the <provider> (?). Please make sure that the argument <unknown_token> at index [<index>] is available in the <module> context.

Potential solutions:
- If <unknown_token> is a provider, is it part of the current <module>?
- If <unknown_token> is exported from a separate @Module, is that module imported within <module>?
  @Module({
    imports: [ /* the Module containing <unknown_token> */ ]
  })

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:

// 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

// 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

// 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 {}
// 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