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)
}