Redis 是一种内存数据存储系统,以其速度和多功能性而闻名,通常用作数据库、缓存、消息代理和队列。
在 NestJS 应用中,NestJS 是一个用于构建高效、可扩展的服务器端应用的 Node.js 框架,Redis 可以以多种方式使用来增强功能和性能:
- 缓存。
- 会话存储。
- 实时数据处理。
- 队列。
- 速率限制。
- 可扩展数据存储。
在接下来的内容中我们将学习一下如何在 nestjs 中使用 Redis。
Redis 安装
要想使用 Redis,他和 mysql 数据库一样,需要安装,这里我们采用 docker 创建的方式,首先在项目跟目录下创建一个 docker-compose.yml 文件并编写如下代码:
yaml
version: "3.9"
services:
redis:
image: "redis:latest"
environment:
- REDIS_PASSWORD=moment
ports:
- "6379:6379"
使用如下命令来启动服务:
bash
docker-compose up -d
执行命令后有如下图所示:
服务启动成功。
如何在 nestjs 中连接 Redis
首先,在项目中安装 ioredis 包。打开终端执行以下命令:
bash
pnpm add ioredis
接着使用如下命令创建一个 redis 模块:
bash
nest g res redis
最终会在控制台上输出如下文件:
在 redis 目录下,只保留 module 和 service 文件:
在 redis.module.ts 文件中,我们编写如下代码:
ts
// src/redis/redis.module.ts
import { Module, Global } from "@nestjs/common";
import Redis from "ioredis";
import { RedisService } from "./redis.service";
@Global()
@Module({
providers: [
{
provide: "REDIS_CLIENT",
useFactory: async () => {
const redis = new Redis({
host: "localhost",
port: 6379,
});
return redis;
},
},
RedisService,
],
exports: ["REDIS_CLIENT", RedisService],
})
export class RedisModule {}
并且在 redis.service.ts 文件中来封装服务,便于在应用程序中重用:
ts
// src/redis/redis.service.ts
import { Injectable, Inject } from "@nestjs/common";
import Redis from "ioredis";
@Injectable()
export class RedisService {
constructor(@Inject("REDIS_CLIENT") private readonly redis: Redis) {}
async get(key: string): Promise<string> {
return await this.redis.get(key);
}
async set(key: string, value: string): Promise<void> {
await this.redis.set(key, value);
}
// ...
}
这样子,我们就可以在其他应用程序中任何部分注入 Redis 的服务了:
ts
// src/app.controller.ts
import { Controller, Get } from "@nestjs/common";
import { RedisService } from "./redis/redis.service";
@Controller()
export class AppController {
constructor(private readonly redisService: RedisService) {}
@Get()
async getHello(): Promise<string> {
await this.redisService.set("key", "value");
return this.redisService.get("key");
}
}
最后,确保你的 RedisModule 已经被导入到应用的根模块中或者某个固定模块中:
ts
// src/app.module.ts
import { Module } from "@nestjs/common";
import { RedisModule } from "./redis/redis.module";
import { AppController } from "./app.controller";
@Module({
imports: [RedisModule],
controllers: [AppController],
providers: [],
})
export class AppModule {}
总结
首先安装并启动 Redis 服务,通常使用 Docker。然后,在 NestJS 项目中安装ioredis
包,创建 Redis 模块和服务,并配置连接。接下来,封装 Redis 操作如设置和获取键值。最后,在应用中注入 Redis 服务使用,并确保 Redis 模块被正确导入根模块或者特定模块。