关于Redis
Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它被广泛用于缓存、数据存储和实时应用程序中。Redis 是一个键值存储数据库,它将数据存储在内存中,以提供快速的读写访问速度。由于数据存储在内存中,Redis 在处理大量数据请求时具有出色的性能。
- 缓存: Redis 最常用的用途之一是作为缓存存储。它可以将热门或频繁访问的数据存储在内存中,从而提供更快的访问速度。这有助于减轻后端数据库的负载,提高应用程序的响应速度。
- 会话存储: Redis 可以用作会话存储后端,用于存储用户会话数据。这对于构建具有用户认证的 Web 应用程序非常有用,因为它允许应用程序在不同请求之间共享用户会话数据。
- 消息队列: Redis 提供了发布-订阅(Pub-Sub)功能,可以用作高效的消息队列。应用程序可以使用 Redis 来发送和接收消息,以实现解耦的消息通信。
- 计数器和排行榜: Redis 支持原子操作,因此可以用于实现计数器和排行榜。您可以在 Redis 中存储计数器的值,或者使用有序集合来存储并根据分数进行排序的数据。
- 实时应用程序: Redis 的快速读写速度使其非常适用于实时应用程序,如实时分析、实时游戏和实时通信应用程序。
- 数据存储: 尽管 Redis 主要用于缓存和临时数据存储,但它也可以用作持久化数据存储。Redis 提供了持久化选项,允许将数据保存在磁盘上,以便在重启后恢复数据。
- 地理空间数据存储: Redis 支持存储地理空间数据和执行地理空间查询,使其在位置相关应用程序中具有潜力。
windows配置redis
redis下载
redis的官网下载:Releases · microsoftarchive/redis (github.com)
点击下载即可
来到安装redis的目录下点击redis-server.exe
如果出现这样就是成功了,如果有其他问题,可自行搜索哦
resp下载
RESP是上一款免费的Redis图形化管理软件 下载地址:github.com/lework/Redi…
自行安装配置后打开就是这样的
好了,这些工作完成,接下来正式进入写代码环节
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.请求接口
请求成功,这样我们的数据就放到了redis了
我们再来试试获取redis中的数据
获取成功!
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把用户的权限存起来,于是就有了这篇文章。
最后感谢你看到了最后,如果你觉得这篇文章对你有帮助,不妨给我点个赞吧。