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

存储引擎支持列表

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

使用默认缓存管理器

  1. import { Component, Autowired, Named } from '@malagu/core';
  2. import { CacheManager, DEFAULT_CACHE_MANAGER } from '@malagu/cache';
  3. @Component()
  4. export class A {
  5. @Autowired(CacheManager)
  6. @Named(DEFAULT_CACHE_MANAGER) // DEFAULT_CACHE_MANAGER 为字符串:'default'
  7. protected readonly cacheManager: CacheManager;
  8. stat(resource: string): Promise<Stat> {
  9. return this.cacheManager.wrap(`stat:${resource}`, () => super.stat(resource));
  10. }
  11. }

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

  1. malagu:
  2. cache:
  3. config:
  4. default:
  5. store: memory
  6. max: 100
  7. ttl: 3600 # seconds

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

  1. import { Component, Autowired, Named } from '@malagu/core';
  2. import { CacheManager, DEFAULT_CACHE_MANAGER } from '@malagu/cache';
  3. @Component()
  4. export class A {
  5. @Autowired(CacheManager)
  6. @Named(DEFAULT_CACHE_MANAGER) // DEFAULT_CACHE_MANAGER 的值为缓存管理器对象的名字
  7. protected readonly cacheManager: CacheManager;
  8. }

使用自定义缓存管理器

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

  1. malagu:
  2. cache:
  3. config:
  4. foo:
  5. store: memory
  6. max: 100
  7. ttl: 3600 # seconds

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

  1. import { Component, Autowired, Named } from '@malagu/core';
  2. import { CacheManager } from '@malagu/cache';
  3. @Component()
  4. export class A {
  5. @Autowired(CacheManager)
  6. @Named('foo') // foo 为缓存管理器对象的名字,与配置文件中的 foo 对应
  7. protected readonly cacheManager: CacheManager;
  8. }

使用 redis 缓存管理器

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

  1. yarn add node-cache-manager-redis # npm i node-cache-manager-redis

这里选择 [node-cache-manager-redis](https://github.com/dial-once/node-cache-manager-redis) 存储引擎,我们也可以选择其他类型的 redis 存储引擎。安装完后需要配置相关缓存配置属性:

  1. malagu:
  2. cache:
  3. config:
  4. redis1:
  5. store: redis # 不同的存储引擎,store 的值不一样,如下:memory、redis、redis-store 等
  6. host: localhost # 默认值
  7. port: 6379 # 默认值
  8. auth_pass: 'XXXXX'
  9. db: 0,
  10. ttl: 600

属性 store 对应关系:

代码中使用如下:

  1. import { Component, Autowired, Named } from '@malagu/core';
  2. import { CacheManager } from '@malagu/cache';
  3. @Component()
  4. export class A {
  5. @Autowired(CacheManager)
  6. @Named('redis1') // redis1 为缓存管理器对象的名字,与配置文件中的 redis1 对应
  7. protected readonly cacheManager: CacheManager;
  8. }