Redis - 985ch/egg-sachikawa GitHub Wiki

在后端项目中,我们需要管理大量的数据,这其中既有永久数据,也有临时数据。在本框架中,我们使用数据库来管理永久数据,并使用Redis来管理临时数据。同时框架的缓存和分布式锁也是依赖Redis实现的。

由于在实践中,通常推荐开发者通过缓存来间接使用Redis而非直接操作Redis,加之Redis本身有比较完善的文档,因此在本节中将不会详述Redis的具体使用方法,而主要关注Redis的配置和访问。

Redis配置

egg-redis支持配置单个Redis连接,也支持配置多个Redis连接。但由于本框架缓存机制的部分功能依赖于Redis的广播/监听机制,而其监听机制又要求必须使用独立的Redis连接完成,因此实际上在框架里通常只进行多Redis连接配置。

// config/config.{env}.js
exports.redis = {
  default: { // 默认配置,该配置会被合并到所有Redis连接中
    port: 6379,
    password: '', // Redis连接密码,实践中一般使用环境变量代替
    host: '127.0.0.1',
  },
  clients: {
    http: { // 接口缓存默认使用名叫http的Redis连接
      db: 0,
    },
    cache: { // 缓存使用的连接
      db: 1,
    },
    lock: { // 分布式锁使用的连接
      db: 0,
    },
    cacheSub: { // 缓存的监听连接,该连接只能用于监听而不能做其他操作
      db: 1,
    },
  },
};

使用方法

在缓存和分布式锁中使用Redis的方法详见对应教程,这里只简单展示一下直接访问Redis的方法

const redis = app.redis.get('cache'); // 使用名为cache的Redis连接
const data = await redis.get('sample'); // 获取键值为sample的数据
await redis.setex('sample', 3600, 'some text'); // 设sample的值为some text,有效期3600秒

由于Redis的命令繁多,在此不一一列出,关于更多的Redis使用方法请自行搜索相关内容。

注意事项

  • 注意egg的配置合并机制,有时候在多配置环境下省略Redis参数会导致配置和开发者的想象有所偏差,并从而导致BUG