前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cache-manager、ioredis配合使用方案(nestjs )

cache-manager、ioredis配合使用方案(nestjs )

原创
作者头像
Jacky-易小天
发布2024-09-13 14:03:28
1080
发布2024-09-13 14:03:28

1. 安装依赖

代码语言:bash
复制
npm i @tirke/node-cache-manager-ioredis cache-manager

2. 创建redis 模块和服务

1. 生成并编辑module

生成module
代码语言:bash
复制
nest g mo redis
编辑模块
代码语言:ts
复制
// 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
代码语言:bash
复制
nest g s redis
编辑service
代码语言:ts
复制
// 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 中的引用

代码语言: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
代码语言:ts
复制
...
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. 调用
代码语言:ts
复制
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);
  }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 安装依赖
  • 2. 创建redis 模块和服务
    • 1. 生成并编辑module
      • 生成module
      • 编辑模块
    • 2.生成并编辑redis service
      • 生成service
      • 编辑service
    • 3. 调用服务
      • 1.使用的模块导入RedisService和模块RedisModule
      • 2. 调用
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档