通过简单的配置就可以直接使用基于 cache-manager 开发的 store
npm i egg-cache --save
或
yarn add egg-cache
// config/plugin.js
exports.cache = {
enable: true,
package: 'egg-cache',
};
// config/config.default.js
exports.cache = {
default: 'memory',
stores: {
memory: {
driver: 'memory',
max: 100,
ttl: 0,
},
},
};
await app.cache.set('foo', 'bar', 60, { foo: 'bar' });
await app.cache.get('foo'); // 'bar'
await app.cache.has('foo'); // true
await app.cache.del('foo');
await app.cache.get('foo', 'default'); // 'default'
await app.cache.has('foo'); // false
// 使用闭包
await app.cache.set('foo', () => {
return 'bar';
}); // 'bar'
// 异步结果
await app.cache.set('foo', () => {
return Promise.resolve('bar');
}); // 'bar'
// 获取缓存,如果不存在则使用闭包中的结果生成,这在很多日常需求中十分有效
await app.cache.get('foo', () => {
return 'bar';
}); // 'bar'
// 和 set 一样,你也可以指定有效期和一些选项
await app.cache.get('foo', () => {
return 'bar';
}, 60, {
foo: 'bar'
});
// foo 已被缓存
await app.cache.get('foo'); // 'bar'
使用基于 redis
的 store :
- 配置中,
store
都使用driver
代替,其它的配置不变
// config/config.default.js
const redisStore = require('cache-manager-ioredis');
exports.cache = {
default: 'memory',
stores: {
memory: {
driver: 'memory',
max: 100,
ttl: 0,
},
redis: { // 配置参考: https://github.com/dabroek/node-cache-manager-ioredis#single-store
driver: redisStore,
host: 'localhost',
port: 6379,
password: '',
db: 0,
ttl: 600,
valid: _ => _ !== null,
},
},
};
- 使用
const store = app.cache.store('redis');
await store.set('foo', 'bar');
await store.get('foo'); // 'bar'
await store.del('foo');
await store.has('foo'); // false
设置缓存
name
缓存名称value
缓存值expire
(可选) 有效期(默认会取相关 store 的配置,单位:秒,0
为永不过期)options
(可选) 配置(memory store 参考:cache-manager 的源码)
获取缓存
name
缓存名称defaultValue
(可选) 默认值expire
(可选) 有效期(当defaultValue
是一个函数时有效,同set
)options
(可选) 配置(当defaultValue
是一个函数时有效,同set
)
删除缓存
name
缓存名称
缓存是否存在
name
缓存名称
获取自定义 store
name
Store 名称
清空缓存
请到 config/config.default.js 查看详细配置项说明。
npm test
请到 Issues 交流。