缓存 - 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'); //清除缓存数据

关于缓存模块的更多内容请查看插件自身的文档