细致入微教你用nest集成redis

2,132 阅读4分钟

关于Redis

Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它被广泛用于缓存、数据存储和实时应用程序中。Redis 是一个键值存储数据库,它将数据存储在内存中,以提供快速的读写访问速度。由于数据存储在内存中,Redis 在处理大量数据请求时具有出色的性能。

  1. 缓存: Redis 最常用的用途之一是作为缓存存储。它可以将热门或频繁访问的数据存储在内存中,从而提供更快的访问速度。这有助于减轻后端数据库的负载,提高应用程序的响应速度。
  2. 会话存储: Redis 可以用作会话存储后端,用于存储用户会话数据。这对于构建具有用户认证的 Web 应用程序非常有用,因为它允许应用程序在不同请求之间共享用户会话数据。
  3. 消息队列: Redis 提供了发布-订阅(Pub-Sub)功能,可以用作高效的消息队列。应用程序可以使用 Redis 来发送和接收消息,以实现解耦的消息通信。
  4. 计数器和排行榜: Redis 支持原子操作,因此可以用于实现计数器和排行榜。您可以在 Redis 中存储计数器的值,或者使用有序集合来存储并根据分数进行排序的数据。
  5. 实时应用程序: Redis 的快速读写速度使其非常适用于实时应用程序,如实时分析、实时游戏和实时通信应用程序。
  6. 数据存储: 尽管 Redis 主要用于缓存和临时数据存储,但它也可以用作持久化数据存储。Redis 提供了持久化选项,允许将数据保存在磁盘上,以便在重启后恢复数据。
  7. 地理空间数据存储: Redis 支持存储地理空间数据和执行地理空间查询,使其在位置相关应用程序中具有潜力。

windows配置redis

redis下载

redis的官网下载:Releases · microsoftarchive/redis (github.com)

image.png 点击下载即可 来到安装redis的目录下点击redis-server.exe

image.png

如果出现这样就是成功了,如果有其他问题,可自行搜索哦 image.png

resp下载

RESP是上一款免费的Redis图形化管理软件 下载地址:github.com/lework/Redi…

自行安装配置后打开就是这样的

image.png

好了,这些工作完成,接下来正式进入写代码环节

Nest集成Redis

0.准备工作

npm install ioredis
nest g res redis

1.配置 Redis 连接

// redis.module.ts
import { Module } from '@nestjs/common';
import { RedisService } from './redis.service';
import { RedisController } from './redis.controller';

@Module({
  providers: [RedisService], // 注册 RedisService 作为提供者
  exports: [RedisService], // 导出 RedisService
  controllers: [RedisController],
})
export class RedisModule {}

2.创建 Redis 服务

// redis.service.ts

import { Injectable } from '@nestjs/common';
import Redis from 'ioredis';

@Injectable()
export class RedisService {
  private readonly redisClient: Redis;

  constructor() {
    this.redisClient = new Redis({
      host: 'localhost', // Redis 服务器的主机名
      port: 6379, // Redis 服务器的端口
    });
  }

  setValue(key: string, value: string){
    return this.redisClient.set(key, value);
  }

  getValue(key: string) {
    return this.redisClient.get(key);
  }
}

3.使用 Redis 服务

(这里的new Result是我自己写的一个返回数据类型)

// redis.controller.ts

import { Controller, Get, Param } from '@nestjs/common';
import { RedisService } from './redis.service';

@Controller('redis')
export class RedisController {
  constructor(private readonly redisService: RedisService) {}

  @Get('set/:key/:value')
  async setKey(@Param('key') key: string, @Param('value') value: string){
    return new Result(await this.redisService.setValue(key, value));
  }

  @Get('get/:key')
  async getValue(@Param('key') key: string) {
    return new Result(await this.redisService.getValue(key));
  }
}

4.请求接口

image.png

image.png

image.png 请求成功,这样我们的数据就放到了redis了

我们再来试试获取redis中的数据

image.png 获取成功!

5.常用api

  • 存入值,且设置过期时间:
setWithExpiry(key: string, value: string, time: number){
  return this.redisClient.setex(key, time, value);
}
  • 删除数据
deleteKey(key: string){ 
  return this.redisClient.del(key);
}
  • 使用哈希表(Hash)
// 在哈希表(Hash)相关的方法中,field这是哈希表中的字段名称。

//设置key中filed字段的数据value
setHashField(key: string, field: string, value: string) {
  return this.redisClient.hset(key, field, value);
}

//获取key中的field字段数据
getHashField(key: string, field: string) {
  return this.redisClient.hget(key, field);
}

//获取key中所有数据
getAllHashFields(key: string){
  return this.redisClient.hgetall(key);
}

根据不同的 Redis 操作和方法,这些参数可能会有所不同。在实际使用过程中,您可以根据您的具体需求传递适当的参数来执行相应的 Redis 操作。 想要了解更多ioredis的api点击此处

尾语

前段时间刚写了篇minio,本来是想再写一篇用nest集成jwt的,但是写的时候太懒了,然后搁置了。因为我自己写的全栈项目需要搞rbac架构,然后就想着用redis把用户的权限存起来,于是就有了这篇文章。

最后感谢你看到了最后,如果你觉得这篇文章对你有帮助,不妨给我点个赞吧。