选用 nestjs-redis 操作 redis 数据库。
下面以一个 user 模块为例,展示使用方法,该模块的结构如下:
--module
--user
--user.controller.ts
--user.model.ts
--user.service.ts
--user.module.ts
安装依赖
yarn add ioredis nestjs-redis
yarn add @types/ioredis -D
实现 Redis 模块
首先,在项目根目录下创建 .env 文件,配置 redis 参数
# REDIS
REDIS_NAME=test
REDIS_HOST=localhost
REDIS_PORT=7505
REDIS_FAMILY=4
REDIS_DB=0
RDIS_PASSWORD=root
接下来,实现 redis 模块
// module/redis/index.ts
import { 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 {}