Components

缓存

Malagu 框架通过集成 cache-manager 库实现的缓存,让缓存更加简单、与业务代码解耦。

合理使用缓存可以让应用更高效,承受更大的并发量,减少响应时间。Malagu 框架基于cache-manager实现了一个开箱即用的组件: @malagu/cache。拥有 cache-manager 丰富的缓存存储引擎,如 redis、fs、mongodb、mongoose、memcached 等等,当然,我们还可以自定义存储引擎。另外,我们也可以根据不同的业务场景,同时使用不同类型的存储引擎。

存储引擎支持列表

@malagu/cache组件默认提供基于内存的存储引擎(也可以使用配置文件修改默认的存储引擎类型),如果需要使用他类型的存储引擎,请在项目中自行安装需要的引擎:

使用默认缓存管理器

import { Component, Autowired, Named } from "@malagu/core";
import { CacheManager, DEFAULT_CACHE_MANAGER } from "@malagu/cache";

@Component()
export class A {
  @Autowired(CacheManager)
  @Named(DEFAULT_CACHE_MANAGER) // DEFAULT_CACHE_MANAGER 为字符串:'default'
  protected readonly cacheManager: CacheManager;

  stat(resource: string): Promise<Stat> {
    return this.cacheManager.wrap(`stat:${resource}`, () => super.stat(resource));
  }
}

默认缓存管理器的默认配置如下:

malagu:
  cache:
    config:
      default:
        store: memory
        max: 100
        ttl: 3600 # seconds

像 store、max 等等配置项说明,请参考 cache-manager 相关的文档。我们也可以通过组件属性覆盖该默认配置。其中 default  为缓存管理器的名字。Malagu 框架使用这个名字,以及名字对应的配置创建缓存管理对象,并托管到 IoC 容器中。所以,我们要使用缓存管理器对象,只需要通过 @Autowired  和 @Named  自动注入我们需要的缓存管理对象即可。如下:

import { Component, Autowired, Named } from "@malagu/core";
import { CacheManager, DEFAULT_CACHE_MANAGER } from "@malagu/cache";

@Component()
export class A {
  @Autowired(CacheManager)
  @Named(DEFAULT_CACHE_MANAGER) // DEFAULT_CACHE_MANAGER 的值为缓存管理器对象的名字
  protected readonly cacheManager: CacheManager;
}

使用自定义缓存管理器

我们只需要在配置文件中声明并配置自定义缓存管理器即可。配置方式如下:

malagu:
  cache:
    config:
      foo:
        store: memory
        max: 100
        ttl: 3600 # seconds

声明并配置好后,我们就可以在业务类中使用配置好的自定义缓存管理器了,如下:

import { Component, Autowired, Named } from "@malagu/core";
import { CacheManager } from "@malagu/cache";

@Component()
export class A {
  @Autowired(CacheManager)
  @Named("foo") // foo 为缓存管理器对象的名字,与配置文件中的 foo 对应
  protected readonly cacheManager: CacheManager;
}

使用 redis 缓存管理器

像 redis、mongodb、memcached 等高级存储引擎都需要事先安装对应的存储引擎。具体可以查看上文的存储引擎列表。安装 redis 存储引擎:

yarn add node-cache-manager-ioredis # npm i node-cache-manager-ioredis

这里选择 node-cache-manager-ioredis存储引擎,我们也可以选择其他类型的 redis 存储引擎。安装完后需要配置相关缓存配置属性:

malagu:
  cache:
    config:
        redis1:
          store: ioredis     # 不同的存储引擎,store 的值不一样,如下:memory、redis-store 等
          host: localhost    # 默认值
          port: 6379         # 默认值
          password: 'XXXXX'
          db: 0
          ttl: 600

属性 store 对应关系:

代码中使用如下: ​

import { Component, Autowired, Named } from "@malagu/core";
import { CacheManager } from "@malagu/cache";

@Component()
export class A {
  @Autowired(CacheManager)
  @Named("redis1") // redis1 为缓存管理器对象的名字,与配置文件中的 redis1 对应
  protected readonly cacheManager: CacheManager;
}

Copyright © 2024 Zero (github@groupguanfang) 粤ICP备2023102563号