在NestJS中使用Redis数据库

99 阅读3分钟

前言

本文通过NestJS框架链接Redis数据库实现增、删、改、查接口的实现;

工具

  • 服务端框架:NestJS
  • 数据库:Redis
  • VSCODE插件:Database Clien 管理数据库
  • 浏览器插件:apifox 验证接口

构建项目

# 全局安装nest脚手架 
$ npm i -g @nestjs/cli 
$ nest new project-name//例如(api)项目名 
# 启动项目 
$ npm run start:dev//开发阶段使用 
# 下载相关的包(用于链接Redis数据库使用)
$ npm install --save ioredis @nestjs-modules/ioredis

文件目录如下:

src:.
    ├─redisapi(说明:单个接口目录名为crud)//通过指令创建出来的 例如:npx nest g res redisapi --no-spec
    |  |— crud.controller.ts//关于此接口控制器
    |  |— crud.module.ts//关于此接口模块
    |  |_ crud.service.ts//关于此接口服务      
    ├─ app.controller.ts//控制器
    ├─ app.module.ts//模块
    ├─ app.service.ts//服务
    └─ main.ts//入口文件

链接数据库

先创建一个数据库:可以参考博主的另一篇文章《快速安装MySQL及常用SQL基操》

前提已经安装了mysql并且配置完成;
    # 创建数据库步骤
    1.搜索框输入cmd使用快捷键(Ctrl+Shift+Enter)以管理员身份运行
    2.输入 redis-cli //安装回车键  进入Redis;
    3.验证链接 ping//返回pong
    4.创建新的键值对数据 SET name boykayuli//
    5.查看name get name//返回 boykayuli 创建成功
    6.创建哈希 HSET key field value//例子 hset user:1 name 'boykayuli' age 20 sex 'man'
    7.查看哈希 HGETALL user:1//返回 {name:'boykayuli',age :20, sex:'man'}
    8. 其他数据操作
    ### 以上操作也可以借助Database Clien插件实现在编辑器中安装对应的插件连链接数据库建表、导入数据    

.env

文件内容:

REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=""
REDIS_DB=0

在app.module.ts

# 通过动态加载.env

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { RedisModule } from '@nestjs-modules/ioredis';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RedisapiController } from './redisapi/redisapi.controller';
import { RedisapiService } from './redisapi/redisapi.service';
import { RedisapiModule } from './redisapi/redisapi.module';
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.env`, // 加载环境变量文件
    }),
    RedisModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => ({
        type: 'single', // 使用单实例模式
        options: {
          host: configService.get<string>('REDIS_HOST'),
          port: configService.get<number>('REDIS_PORT'),
          password: configService.get<string>('REDIS_PASSWORD'),
          db: configService.get<number>('REDIS_DB'),
        },
      }),
    }),
    RedisapiModule],
  controllers: [AppController, RedisapiController],
  providers: [AppService, RedisapiService],
})
export class AppModule {}

接口编写及调试

使用指令创建一个RedisAPI模块

npx  nest g mo redisapi --no-spec//创建redisapi.module.ts
npx nest g s redisapi --no-spec//创建redisapi.service.ts
npx nest g co redisapi --no-spec//创建redisapi.controller.ts

在redisapi.module.ts

import { Module } from '@nestjs/common';
import { RedisapiService } from './redisapi.service';
import { RedisapiController } from './redisapi.controller';

@Module({
  providers: [RedisapiService],
  controllers: [RedisapiController]
})
export class RedisapiModule {}

在redisapi.service.ts

import { Injectable } from '@nestjs/common';
import { InjectRedis } from '@nestjs-modules/ioredis';
@Injectable()
export class RedisapiService {
    constructor(@InjectRedis() private readonly redis) {}
    async getRedis(key:string){
        console.log(key)
        let data = await this.redis.get(key)
        if(data == null){
            return {
                code:400,
                msg:"查询失败",
                data:null
            }
        }
        return {
            code:200,
            msg:"查询成功",
            data
        }
    }
    async setRedis(body:any){
       let data= await this.redis.set(body.key, body.value);
       if(data == "OK"){
        return {
            code:200,
            msg:"设置成功",
            data
        } 
       }
       return {
        code:400,
        msg:"设置失败",
        data 
       }
    }
   async delRedis(key:string){
    let data = await this.redis.del(key); 
    if(data == 1){
        return {
            code:200,
            msg:"删除成功",
            data    } 
    }
   }
}


在redisapi.controller.ts

import { Controller,Get,Post, Body,Param,Delete} from '@nestjs/common';
import { RedisapiService } from './redisapi.service';
@Controller('redisapi')
export class RedisapiController {
  constructor(private readonly redisapiService: RedisapiService) {}
  @Get(`:key`)
  getRedis(@Param('key') key: string) {
    return this.redisapiService.getRedis(key);
  }
  @Post()
  setRedis(@Body() body: any) {
    return this.redisapiService.setRedis(body);
  }
  @Delete(':key')
  removeRedis(@Param('key') key: string) {
    return this.redisapiService.delRedis(key);
  }
}

接口实现完后通过Apifox浏览器插件

  • 创建团队
  • 在团队中创建项目
  • 进入项目点击快捷请求 如图所示

屏幕截图 2025-03-27 210349.png

总结

以上就是NestJS链接Redis以及编写、调试、测试增、删、改、查接口的全部流程,以及Database Clien的基本操作等相关内容;