如何使用docker创建一个Redis服务,并使用nestjs连接🦘🦘🦘

Redis 是一种内存数据存储系统,以其速度和多功能性而闻名,通常用作数据库、缓存、消息代理和队列。

在 NestJS 应用中,NestJS 是一个用于构建高效、可扩展的服务器端应用的 Node.js 框架,Redis 可以以多种方式使用来增强功能和性能:

  1. 缓存。
  2. 会话存储。
  3. 实时数据处理。
  4. 队列。
  5. 速率限制。
  6. 可扩展数据存储。

在接下来的内容中我们将学习一下如何在 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 模块被正确导入根模块或者特定模块。

相关推荐
浩浩测试一下6 分钟前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
西陵32 分钟前
Nx带来极致的前端开发体验——借助CDD&TDD开发提效
前端·javascript·架构
叹一曲当时只道是寻常33 分钟前
vue中添加原生右键菜单
javascript·vue.js
小磊哥er43 分钟前
【前端工程化】前端工作中的业务规范有哪些
前端
旷世奇才李先生1 小时前
Next.js 安装使用教程
开发语言·javascript·ecmascript
ᥬ 小月亮1 小时前
webpack基础
前端·webpack
llwszx1 小时前
Spring中DelayQueue深度解析:从原理到实战(附结构图解析)
java·后端·spring·delayqueue·延迟任务
YongGit1 小时前
探索 AI + MCP 渲染前端 UI
前端·后端·node.js
77qqqiqi2 小时前
正则表达式
java·后端·正则表达式
慧一居士2 小时前
<script setup>中的setup作用以及和不带的区别对比
前端