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

相关推荐
爱上语文16 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people20 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
北岛寒沫3 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
everyStudy3 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
(⊙o⊙)~哦4 小时前
JavaScript substring() 方法
前端
无心使然云中漫步5 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者5 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_5 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
罗政6 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端