如何使用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 模块被正确导入根模块或者特定模块。

相关推荐
java小吕布1 分钟前
Java中Properties的使用详解
java·开发语言·后端
Black蜡笔小新2 分钟前
网页直播/点播播放器EasyPlayer.js播放器OffscreenCanvas这个特性是否需要特殊的环境和硬件支持
前端·javascript·html
秦jh_1 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
2401_857610031 小时前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
蜗牛快跑2131 小时前
面向对象编程 vs 函数式编程
前端·函数式编程·面向对象编程
Dread_lxy1 小时前
vue 依赖注入(Provide、Inject )和混入(mixins)
前端·javascript·vue.js
涔溪2 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
榴莲千丞2 小时前
第8章利用CSS制作导航菜单
前端·css
奔跑草-2 小时前
【前端】深入浅出 - TypeScript 的详细讲解
前端·javascript·react.js·typescript
羡与2 小时前
echarts-gl 3D柱状图配置
前端·javascript·echarts