当前位置: 首页 > article >正文

nestjs cache manager 很ioredis配合使用方案

1. 安装依赖

npm i @tirke/node-cache-manager-ioredis cache-manager

2. 创建redis 模块和服务

1. 生成并编辑module

生成module
nest g mo redis
编辑模块
// redis.module.ts
import { Module } from '@nestjs/common';
// import { redisClient } from './redis.client';
import { ioRedisStore, RedisCache } from '@tirke/node-cache-manager-ioredis';
import { caching } from 'cache-manager';
@Module({
  providers: [
    {
      provide: 'REDIS_CLIENT',
      useValue: async () => {
        const redisCache: RedisCache = await caching(ioRedisStore, {
          host: '192.168.50.3', // default value
          port: 6379, // default value
          password: '',
          ttl: 600,
        });

        // listen for redis connection error event
        const cache = redisCache.store;
        cache.client.on('error', (error: unknown) => {
          console.error('Redis error:', error);
        });
      },
    },
  ],
  exports: ['REDIS_CLIENT'],
})
export class RedisModule {}


2.生成并编辑redis service

生成service
nest g s redis
编辑service
// redis.service.ts
import { Injectable } from '@nestjs/common';
import { Inject } from '@nestjs/common';
import { Redis } from 'ioredis';

@Injectable()
export class RedisService {
  constructor(@Inject('REDIS_CLIENT') private readonly client: Redis) {}

  async set(key: string, value: any): Promise<void> {
    await this.client.set(key, value);
  }

  async get(key: string): Promise<string | null> {
    return this.client.get(key);
  }

  async del(key: string): Promise<number> {
    return this.client.del(key);
  }
}

note: 记得删除app.mudule.ts 中的引用

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';

import { ConfigModule } from '@nestjs/config';
// import { RedisModule } from './redis/redis.module';刪除

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: ['.env.development.local', '.env.development', '.env'],
      //If a variable is found in multiple files, the first one takes precedence.
    }),
    MongooseModule.forRoot(process.env.MONGO_URI),
    UserModule,
    AuthModule,
    MemberModule,
   //  RedisModule,刪除
  ],
  controllers: [AppController],
  providers: [AppService,RedisService],
})
export class AppModule {}


  

3. 调用服务

1.使用的模块导入RedisService和模块RedisModule
...
import { RedisService } from 'src/redis/redis.service';
import { RedisModule } from 'src/redis/redis.module';

@Module({
  imports: [
    RedisModule,
   ....
  ],
  providers: [
 	...
    RedisService
  ],
  exports: [AuthService],
  controllers: [AuthController],
})
export class AuthModule {}

2. 调用
import { Injectable } from '@nestjs/common';
import { RedisService } from 'src/redis/redis.service';
@Injectable()
export class AuthService {
  constructor(
    private readonly redisService: RedisService,
  ) {}
  async login(member: MemberLoginDto) {
    ...
    await this.redisService.set(`token:${accessToken}`, memberInfo);
  }
}


http://www.kler.cn/a/307056.html

相关文章:

  • 即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention
  • Android Profiler 内存分析
  • 009_SSH_Mysql图书管理系统(学生注册 借书 还书 绵阳)——lwplus87(免费送)
  • 统信UOS开发环境支持Electron
  • 华为网络设备这些“危险命令”,切记不能瞎操作!
  • Git - Think in Git
  • Python Pyvis库创建交互式网络图 高级功能详解
  • 设计模式---中介者模式
  • 智能客服 | AI助理与内部知识库如何优化用户体验
  • 机器学习-深度学习数据集之打架斗殴识别数据集
  • Mysql InnoDB 存储引擎简介
  • Python 解析 JSON 数据
  • RabbitMQ高级篇,进阶内容
  • 【题解】AT_arc035_b [ARC035B] アットコーダー王国のコンテスト事情
  • 手势开关灯
  • 宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)
  • 【Kubernetes】常见面试题汇总(十八)
  • git rev-parse
  • Nginx 文件名逻辑漏洞(CVE-2013-4547)
  • BM5 合并k个已排序的链表
  • 一、机器学习算法与实践_01基本概念与项目流程笔记
  • 一句话描述设计模式
  • 深入分析计算机网络性能指标
  • 无人机培训机构组装调试技术详解
  • 【我的 PWN 学习手札】Fastbin Double Free
  • 【系统分析师】-安全体系