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