egg中redis的简单使用
安装
在服务器或电脑中安装redis
https://www.runoob.com/redis/redis-install.html
egg-redis插件
引入插件
npm install egg-redis --save
配置插件
config/plugin.js
module.exports = {
// ...
redis: {
enable: true,
package: 'egg-redis',
}
}
config/config.default.js
redis: {
client: {
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
password: '',
db: 0
}
},
封装
封装常用方法可以更方便的调用
app/service/redis.js
const Service = require('egg').Service;
class service extends Service {
async set(key, value, seconds) {
value = JSON.stringify(value)
if (seconds) {
await this.app.redis.set(key, value, 'EX', seconds)
} else {
await this.app.redis.set(key, value)
}
}
async get(key) {
let data = await this.app.redis.get(key)
if (data) {
return JSON.parse(data)
}
return ''
}
async del(key) {
await this.app.redis.del(key)
}
async clearAll() {
await this.app.redis.flushall()
}
}
module.exports = service;
调用
写
写入一条key为data、值为{a:1,b:2}、过期时间为60s的数据
await this.ctx.service.redis.set('data',{a:1,b:2}},60)
查
await this.ctx.service.redis.get('data')
使用举例
查询redis中是否有数据,有数据直接返回,没有数据则去数据库中查寻,返回数据并写入redis
async tree() {
const {ctx, app} = this;
let dictTree=await ctx.service.redis.get('dictTree')
if(!dictTree){
let result = await db.SystemDict.findAll({
order: [['orderBy', 'ASC']],
raw: true
})
dictTree = ctx.service.dict.getTree(result);
ctx.service.redis.set('dictTree',dictTree,60*60)
}
ctx.helper.success(ctx, dictTree)
}