选用 nestjs-redis 操作 redis 数据库。

下面以一个 user 模块为例,展示使用方法,该模块的结构如下:

  1. --module
  2. --user
  3. --user.controller.ts
  4. --user.model.ts
  5. --user.service.ts
  6. --user.module.ts

安装依赖

  1. yarn add ioredis nestjs-redis
  2. yarn add @types/ioredis -D

实现 Redis 模块

首先,在项目根目录下创建 .env 文件,配置 redis 参数

  1. # REDIS
  2. REDIS_NAME=test
  3. REDIS_HOST=localhost
  4. REDIS_PORT=7505
  5. REDIS_FAMILY=4
  6. REDIS_DB=0
  7. RDIS_PASSWORD=root

接下来,实现 redis 模块

  1. // module/redis/index.ts
  2. import { RedisModule } from 'nestjs-redis'
  3. import { ConfigModule, ConfigService } from '@nestjs/config'
  4. export default [
  5. RedisModule.forRootAsync({
  6. imports: [ConfigModule],
  7. useFactory: (configService: ConfigService) => ({
  8. name: configService.get('REDIS_NAME'),
  9. host: configService.get('REDIS_HOST'),
  10. port: configService.get('REDIS_PORT'),
  11. family: configService.get('REDIS_FAMILY'),
  12. db: configService.get('REDIS_DB'),
  13. password: configService.get('RDIS_PASSWORD'),
  14. }),
  15. inject: [ConfigService]
  16. })
  17. ]

实现 Service

  1. import { Injectable } from '@nestjs/common'
  2. import { RedisService } from 'nestjs-redis'
  3. import { Redis } from 'ioredis'
  4. @Injectable()
  5. export class UserService {
  6. redisClient: Redis;
  7. constructor(
  8. private readonly redisService: RedisService
  9. ) {
  10. this.redisClient = this.redisService.getClient('test')
  11. }
  12. async setAgeCache(age: number, expire: number = 60) {
  13. this.redisClient.set('age', age, 'EX', expire)
  14. }
  15. }

实现 Controller

  1. import { Controller, Post, Body } from '@nestjs/common'
  2. import { UserService } from './user.service'
  3. @Controller('user')
  4. export class UserController {
  5. constructor(private readonly userService: UserService) {}
  6. @Post('/redis/set/age')
  7. async setAgeCache(@Body() { value }: { value: number }) {
  8. await this.userService.setAgeCache(value)
  9. return { done: true }
  10. }
  11. }

实现 Module

  1. import { Module } from '@nestjs/common'
  2. import { User } from './user.model'
  3. import { UserController } from './user.controller'
  4. import { UserService } from './user.service'
  5. @Module({
  6. providers: [UserService],
  7. controllers: [UserController]
  8. })
  9. export class UserModule {}

引入模块

  1. import { APP_FILTER } from '@nestjs/core'
  2. import { Module } from '@nestjs/common'
  3. import { ConfigModule } from '@nestjs/config'
  4. import { UserModule } from './module/user/user.module'
  5. import redisModule from './module/redis'
  6. @Module({
  7. providers: [
  8. {
  9. provide: APP_FILTER,
  10. useClass: ExceptionFilter
  11. }
  12. ],
  13. imports: [
  14. UserModule,
  15. ConfigModule.forRoot(),
  16. redisModule
  17. ]
  18. .concat(databaseModule, redisModule)
  19. .filter(module => !!module)
  20. })
  21. export class AppModule {}