合理使用缓存可以让应用更高效,承受更大的并发量,减少响应时间。Malagu 框架基于 [cache-manager](https://www.npmjs.com/package/cache-manager)
实现了一个开箱即用的组件: @malagu/cache
。拥有 cache-manager
丰富的缓存存储引擎,如 redis、fs、mongodb、mongoose、memcached 等等,当然,我们还可以自定义存储引擎。另外,我们也可以根据不同的业务场景,同时使用不同类型的存储引擎。
存储引擎支持列表
@malagu/cache
组件默认提供基于内存的存储引擎(也可以使用配置文件修改默认的存储引擎类型),如果需要使用他类型的存储引擎,请在项目中自行安装需要的引擎:
- node-cache-manager-redis (uses sol-redis-pool)
- node-cache-manager-redis-store (uses node_redis)
- node-cache-manager-ioredis (uses ioredis)
- node-cache-manager-mongodb
- node-cache-manager-mongoose
- node-cache-manager-fs
- node-cache-manager-fs-binary
- node-cache-manager-fs-hash
- node-cache-manager-hazelcast
- node-cache-manager-memcached-store
- node-cache-manager-memory-store
使用默认缓存管理器
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](https://www.npmjs.com/package/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-redis # npm i node-cache-manager-redis
这里选择 [node-cache-manager-redis](https://github.com/dial-once/node-cache-manager-redis)
存储引擎,我们也可以选择其他类型的 redis 存储引擎。安装完后需要配置相关缓存配置属性:
malagu:
cache:
config:
redis1:
store: redis # 不同的存储引擎,store 的值不一样,如下:memory、redis、redis-store 等
host: localhost # 默认值
port: 6379 # 默认值
auth_pass: 'XXXXX'
db: 0,
ttl: 600
属性 store
对应关系:
- redis: node-cache-manager-redis (uses sol-redis-pool)
- redis-store: node-cache-manager-redis-store (uses node_redis)
- ioredis: node-cache-manager-ioredis (uses ioredis)
- mongodb: node-cache-manager-mongodb
- mongoose: node-cache-manager-mongoose
- fs: node-cache-manager-fs
- fs-binary: node-cache-manager-fs-binary
- fs-hash: node-cache-manager-fs-hash
- hazelcast: node-cache-manager-hazelcast
- memcached-store: node-cache-manager-memcached-store
- memory-store: node-cache-manager-memory-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;
}