缓存 - 985ch/egg-sachikawa GitHub Wiki
缓存在特定情况下可以有效的提高接口响应效率并降低服务器的CPU占用,以实现在不增加服务器成本的情况下提升用户体验。
使用前注意
- 缓存的是利用空间换取时间的一种方案
- 在使用缓存时,必须注意数据的时效性,避免因数据的时效性导致问题
- 框架支持内存缓存和Redis缓存两种缓存方案
- 内存缓存效率极高,但是能存储的数据不能太多,否则可能导致服务器内存不足而崩溃
- Redis缓存效率不及内存缓存,但是可以存储大量数据,而且服务器重启后不会立即丢失
- 永远不要在缓存里存放永久数据,尽管Redis允许这么做
使用示例
在框架里,我们利用插件egg-cache-9来实现缓存。
// config/config.{env}.js
exports.cache9 = {
clients: {
mem: {
class: 'memory',
pubRedis: 'cache',
subRedis: 'cacheSub',
ttl: 1800,
},
http: {
class: 'redis',
redis: 'http',
channel: 'http',
ttl: 900,
},
main: {
class: 'redis',
redis: 'cache',
channel: 'cache',
ttl: 1800,
},
},
};
// 获取对应的缓存实例
const cacheMem = app.cache9.get('mem');
const cacheRedis = app.cache9.get('main');
// 从缓存或者数据源获取数据
let data = await cacheMem.get('key', async ()=>{ /* 在这里从数据源获取你的数据并返回 */ });
cacheMem.renew('key'); // 更新缓存到期时间
await cacheMem.clear('key'); //清除缓存数据
// 从缓存或者数据源获取一组数据
let {list, json} = await cacheRedis.getM('key', ids, obj=>obj.id, async ()=>{ /* 在这里从数据源获取你的数据并返回 */ });
cacheRedis.renewM('key', ids); // 更新缓存到期时间
await cacheRedis.clearM('key', ids); //清除缓存数据
await cacheRedis.clearM('key'); //清除缓存数据
关于缓存模块的更多内容请查看插件自身的文档