当前位置: 首页 > 工具软件 > core-nestjs > 使用案例 >

【NestJS】内存Caching基本用法

有权
2023-12-01

基本需求定义

缓存有两种基本用法,根据需求可大致分为两类:

需求一:缓存一些指定key,在使用的时候获取key里面的内容,key可以根据需求自由定义,按使用情况获取或者删除

需求二:自动缓存接口查询响应内容,如查询某列表或者基本详情信息接口缓存,如 findAll(),getUserInfo(),针对这种nestjs直接有封装

安装

npm install cache-manager
npm install -D @types/cache-manager

导入模块

import { CacheModule, Module } from '@nestjs/common';
import { AppController } from './app.controller';

@Module({
  imports: [CacheModule.register()],
  controllers: [AppController],
})
export class AppModule {}

直接操作缓存

需求一可以直接操作缓存,一般为 set 设置指定key内容、get 获取指定key、del 删除指定key、reset 重置清空

注入 CACHE_MANAGER

import { Injectable, CACHE_MANAGER, Inject } from '@nestjs/common'
import { Cache } from 'cache-manager'


constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}

set操作


//设置一个 key value
await this.cacheManager.set('key', 'value')

//设置过期时间
await this.cacheManager.set('key', 'value', { ttl: 1000 })

get操作

const value = await this.cacheManager.get('key')

del操作

await this.cacheManager.del('key')

reset操作

//清空所有key
await this.cacheManager.reset();

自动缓存接口响应

要自动缓存接口查询结果,直接使用nestjs封装好的CacheInterceptor即可,源码分析有个文章也讲得很清楚 :传送门,这里直接讲下基本用法,用起来确实特别简单

缓存指定控制器

@Controller()
@UseInterceptors(CacheInterceptor)
export class AppController {
  @Get()
  findAll(): string[] {
    return [];
  }
}

全局缓存

如果指定单个比较麻烦,也可以直接全局缓存,不过使用前还是根据实际情况来

import { CacheModule, Module, CacheInterceptor } from '@nestjs/common';
import { AppController } from './app.controller';
import { APP_INTERCEPTOR } from '@nestjs/core';

@Module({
  imports: [CacheModule.register()],
  controllers: [AppController],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: CacheInterceptor,
    },
  ],
})
export class AppModule {}

全局自定义缓存限制

自动接口缓存一般还是要指定下过期时间和最大缓存数量,在模块注册的时候可以全局自定义一个默认值

CacheModule.register({
  ttl: 5, // seconds
  max: 10, // maximum number of items in cache
});

个性化重写缓存限制

在某个控制器也可以单独定义针对某个控制器的限制时间和一些缓存key

@Controller()
export class AppController {
  @CacheKey('custom_key')
  @CacheTTL(20)
  findAll(): string[] {
    return [];
  }
}

 类似资料: