1.作用

服务端复杂的数据库查询会严重降低访问速度,我们需要将一些常用的接口数据进行存储,用户在获取数据的时候,直接将数据从内存中读取,不进行数据库查询,可以大大提高服务器性能。存储方式主要有文件存储和内存存储,文件存储通过fs模块写入读取txt文件,不多说;这里使用redis内存存储。

2.下载安装redis

2.1 windows安装,

下载目录https://github.com/MicrosoftArchive/redis/releases,解压,打开redis-server.msi,开启redis服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2linux安装
查看系统是否安装redis
yum info redis
 
如果没有安装,执行以下步骤
安装epel库
yum install epel-release -y
安装redis
yum install redis -y
 
操作
启动:systemctl start redis
重启:systemctl restart redis
关闭:systemctl stop redis
 
设置开机启动
systemctl enable redis

2 egg中使用redis

1、安装依赖

npm i egg-redis -S

2、config/plugin.js中引入插件

exports.redis = {
    enable: true,
    package: 'egg-redis'
}

3、config.default.js中配置连接地址

config.redis = {
  client: {
    port: 6379,
    host: '127.0.0.1',
    password: '', 
    db: 0
  }, 
}

4、在egg中使用

await this.app.redis.set('userInfo', '张三');
let userInfo = await this.app.redis.get('userInfo');

5、建议封装redis工具,对数据做进一步优化处理。新建一个服务文件redis.js

const Service = require('egg').Service;
class RedisService extends Service {
  // 设置
  async set(key, value, seconds) {
    let { redis } = this.app;
    value = JSON.stringify(value);
    if(!seconds){
      await redis.set(key, value);
    }else{
      // 设置有效时间
      await redis.set(key, value, 'EX', seconds);
    }
  }
  // 获取
  async get(key) {
    let { redis } = this.app;
    let data = await redis.get(key);
    if (!data) return;
    data = JSON.parse(data);
    return data;
  }
  // 清空redis
  async flushall() {
    let { redis } = this.app;
    redis.flushall();
    return;
  }
}
module.exports = RedisService;

6、使用

console.time() // 开始计时
let goodsList = await this.service.redis.get('goodsList');
if (!goodsList) {
  console.log('没有redis缓存')
  goodsList = await this.app.mysql.select('goods');
  this.service.redis.set('goodsList', goodsList);
}
console.timeEnd() // 打印时长
await this.ctx.body = goodsList;

在这里插入图片描述
可以看到,第一次访问没有redis缓存,时间是9毫秒,第二次访问,从redis中获取数据,时间是0.6毫秒。这仅仅是一次数据库查询,如果进行复杂的数据库查询以及逻辑处理,耗费的时间会更长,redis可以将速度提升至原来的数十倍甚至数百倍!

7、关闭redis

在config/plugin.js中将redis的enable改为false

exports.redis = {
    enable: false,
    package: 'egg-redis'
}

在service/redis.js中添加判断,以get方法为例

let { redis } = this.app;
if (redis) { // 开启redis
  let data = await redis.get(key);
  if (!data) return;
  data = JSON.parse(data);
  return data;
} else { // 关闭redis,直接返回空
  return;
}

感谢作者 :不求甚解bc
参考转载链接:https://blog.csdn.net/bocongbo/article/details/100529922

Logo

更多推荐