选用 nestjs-redis 操作 redis 数据库。
下面以一个 user 模块为例,展示使用方法,该模块的结构如下:
--module--user--user.controller.ts--user.model.ts--user.service.ts--user.module.ts
安装依赖
yarn add ioredis nestjs-redisyarn add @types/ioredis -D
实现 Redis 模块
首先,在项目根目录下创建 .env 文件,配置 redis 参数
# REDISREDIS_NAME=testREDIS_HOST=localhostREDIS_PORT=7505REDIS_FAMILY=4REDIS_DB=0RDIS_PASSWORD=root
接下来,实现 redis 模块
// module/redis/index.tsimport { RedisModule } from 'nestjs-redis'import { ConfigModule, ConfigService } from '@nestjs/config'export default [RedisModule.forRootAsync({imports: [ConfigModule],useFactory: (configService: ConfigService) => ({name: configService.get('REDIS_NAME'),host: configService.get('REDIS_HOST'),port: configService.get('REDIS_PORT'),family: configService.get('REDIS_FAMILY'),db: configService.get('REDIS_DB'),password: configService.get('RDIS_PASSWORD'),}),inject: [ConfigService]})]
实现 Service
import { Injectable } from '@nestjs/common'import { RedisService } from 'nestjs-redis'import { Redis } from 'ioredis'@Injectable()export class UserService {redisClient: Redis;constructor(private readonly redisService: RedisService) {this.redisClient = this.redisService.getClient('test')}async setAgeCache(age: number, expire: number = 60) {this.redisClient.set('age', age, 'EX', expire)}}
实现 Controller
import { Controller, Post, Body } from '@nestjs/common'import { UserService } from './user.service'@Controller('user')export class UserController {constructor(private readonly userService: UserService) {}@Post('/redis/set/age')async setAgeCache(@Body() { value }: { value: number }) {await this.userService.setAgeCache(value)return { done: true }}}
实现 Module
import { Module } from '@nestjs/common'import { User } from './user.model'import { UserController } from './user.controller'import { UserService } from './user.service'@Module({providers: [UserService],controllers: [UserController]})export class UserModule {}
引入模块
import { APP_FILTER } from '@nestjs/core'import { Module } from '@nestjs/common'import { ConfigModule } from '@nestjs/config'import { UserModule } from './module/user/user.module'import redisModule from './module/redis'@Module({providers: [{provide: APP_FILTER,useClass: ExceptionFilter}],imports: [UserModule,ConfigModule.forRoot(),redisModule].concat(databaseModule, redisModule).filter(module => !!module)})export class AppModule {}
