本地安装Redis
Windows
下载地址:https://github.com/MicrosoftArchive/redis/releases,下载Zip格式并解压,打开redis-server.exe,开启redis服务
Linux
// 查看系统是否安装redis
yum info redis
// 如果没有安装,执行以下步骤
// 安装epel库
yum install epel-release -y
// 安装redis
yum install redis -y
// 操作
启动:systemctl start redis
重启:systemctl restart redis
关闭:systemctl stop redis
// 设置开机启动
systemctl enable redis
Mac
brew install redis
brew services start redis
redis-server /usr/local/etc/redis.conf
项目中安装redis
pnpm add ioredis
pnpm add @nestjs/microservices -D
自定义Redis服务
@@filename(redis-cache.service.ts)
import { HttpException, HttpStatus, Injectable } from '@nestjs/common'
import { Redis, type RedisKey } from 'ioredis'
// 自定义Redis服务
@Injectable()
export class RedisCacheService {
constructor(private readonly redis: Redis) {}
// 获取redis
async get(key) {
try {
const res = await this.redis.get(key)
return JSON.parse(res)
} catch (e) {
throw new HttpException(e, HttpStatus.BAD_REQUEST)
}
}
// 设置redis
async set(key: string, value, ttl = 10000) {
try {
return await this.redis.set(key, JSON.stringify(value), 'EX', ttl)
} catch (e) {
throw new HttpException(e, HttpStatus.BAD_REQUEST)
}
}
/**
* 删除redis
*/
async delete(key: RedisKey[]) {
try {
return await this.redis.del(key)
} catch (e) {
throw new HttpException(e, HttpStatus.BAD_REQUEST)
}
}
}
初始化Redis
@@filename(redis-cache.module.ts)
import { Module } from '@nestjs/common'
import { Transport, ClientsModule } from '@nestjs/microservices'
import { Redis } from 'ioredis'
import { RedisCacheService } from './redis-cache.service'
@Module({
imports: [
// 初始化redis,redis参数建议配置到外部配置文件引入
ClientsModule.register([
{
name: 'MATH_SERVICE',
transport: Transport.REDIS,
options: {
host: 'redis://localhost:6379',
},
}
]),
],
providers: [ RedisCacheService, Redis ],
exports: [ RedisCacheService ]
})
export class RedisCacheModule {}
使用Redis服务(以UserModule为例)
user.module.ts
@@filename(user.module.ts)
import { Module } from '@nestjs/common'
import { UserService } from './user.service'
import { UserController } from './user.controller'
import { RedisCacheModule } from 'src/common/redis-catch/redis-cache.module'
/**
* @description 用户模块
*/
@Module({
imports: [
// 导入Redis模块
RedisCacheModule
],
controllers: [ UserController ],
providers: [ UserService ],
exports: [ UserService ]
})
export class UserModule {}
user.service.ts
@@filename(user.service.ts)
import { Injectable } from '@nestjs/common'
import { RedisCacheService } from 'src/common/redis-catch/redis-cache.service'
/**
* @description 用户服务
*/
@Injectable()
export class UserService {
constructor(
private readonly redisCacheService: RedisCacheService,
) {}
async create() {
// 存储到redis
this.redisCacheService.set('要存储的key值', '要存储的数据', 60 * 30)
// 读取redis
this.redisCacheService.get('要读取的key值')
// 删除redis
this.redisCacheService.delete([ '要删除的key值' ])
return 'success'
}
}
个人博客:https://www.linmeimei.top/ 欢迎访问