• egg(十九):使用egg-redis性能优化,缓存数据提升响应效率


    前言:

            在写一些大数据量的接口时候,发现响应速度太慢了,接口,通常一次要8s-12s,这么长的响应时长,给用户带来了极大的不便,这里来利用缓存方法,来对接口进行优化,第一次响应完以后,把数据缓存起来,之后用缓存数据来做一些数据操作。

    操作步骤:

    1、电脑安装redis工具

    window:

    github分享:入口

    个人网盘分享(推荐)

    链接:https://pan.baidu.com/s/1c4mBdwhxJshvC3i_fI2_gg 

    提取码:

    5ntg

    linux安装

    1. 查看系统是否安装redis
    2. yum info redis
    3. 如果没有安装,执行以下步骤
    4. 安装epel库
    5. yum install epel-release -y
    6. 安装redis
    7. yum install redis -y
    8. 操作
    9. 启动:systemctl start redis
    10. 重启:systemctl restart redis
    11. 关闭:systemctl stop redis
    12. 设置开机启动
    13. systemctl enable redis

    mac安装

    1. brew install redis
    2. brew services start redis
    3. redis-server /usr/local/etc/redis.conf

    2、电脑运行刚安装的redis工具

    (1)把刚下载的安装包放到你的文件夹中,打开是这个文件压缩包,然后解压

     (2)解压后的文件,找到 redis-server.exe  这个是启动服务的快捷键,点击

     (3)出现下面的画面,代表服务启动了,端口号是6379

     (4)cmd弹框中动态添加,查看缓存内容

    1. myKey是你的key值,abc是具体的value值
    2. 设置键值对 set myKey abc
    3. 查看键值对 get myKey

    1)注意,刚刚第3步打开的服务不能关闭,再次打开一个cmd弹框

    2)输入     redis-cli.exe -h 127.0.0.1 -p 6379 ,如果出现其他报错,不要着急,

     3)更换命令输入     .\redis-cli.exe -h 127.0.0.1 -p 6379   ,看到下面的这个服务,就表示成功了

     4)输入我们的设置命令,然后回车

     set demo 123456 

    5)获取我们刚设置的缓存内容,注意,我们没有设置果abc,所以拿到的是(nil),我们设置了demo,就可以看到具体内容

    get abc

    3、egg项目中的操作

    (1)项目安装插件

    npm i egg-redis -S

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

    1. exports.redis = {
    2.     enable: true,
    3.     package: 'egg-redis'
    4. }

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

    1. config.redis = {
    2.   client: {
    3.     port: 6379,
    4.     host: '127.0.0.1',
    5.     password: 'auth'
    6.     db: 0
    7.   }, 
    8. }

    4、service下 新建一个服务文件redis.js

    1. const Service = require('egg').Service;
    2. const time = 60 * 60 * 24 * 365 //默认缓存失效时间 365天
    3. class RedisService extends Service {
    4. // 设置
    5. async set(key, value, seconds) {
    6. // seconds 有效时长
    7. let { redis } = this.app;
    8. value = JSON.stringify(value);
    9. if(!seconds){
    10. // await redis.set(key, value);
    11. await redis.set(key, value, 'EX', time);
    12. }else{
    13. // 设置有效时间
    14. await redis.set(key, value, 'EX', seconds);
    15. }
    16. }
    17. // 获取
    18. async get(key) {
    19. let { redis } = this.app;
    20. let data = await redis.get(key);
    21. if (!data) return;
    22. data = JSON.parse(data);
    23. return data;
    24. }
    25. // 清空redis
    26. async flushall() {
    27. let { redis } = this.app;
    28. redis.flushall();
    29. return;
    30. }
    31. }
    32. module.exports = RedisService;

     5、方法中具体使用

    (1)获取

    let xiaoshuo = await this.app.redis.get('xiaoshuo1');

    (2)设置

    1. let str = 123
    2. await this.app.redis.set('xiaoshuo1', str);

    6、具体业务使用

    1. async getXiaoshuo1() {
    2. let xiaoshuo = await this.app.redis.get('xiaoshuo1');
    3. //如果有缓存数据,就直接使用缓存
    4. if(xiaoshuo){
    5. this.ctx.body = {
    6. code:200,
    7. masg:'success',
    8. data: {
    9. list:xiaoshuo
    10. }
    11. }
    12. return
    13. }
    14. //获取mysql数据
    15. let allList = await this.app.mysql.query(initSql);
    16. this.ctx.body = {
    17. code:200,
    18. masg:'success',
    19. data: {
    20. list:allList
    21. }
    22. };
    23. }

    7、如果你想测试请求接口的时间和使用了缓存以后的时间,测试方法

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

  • 相关阅读:
    第15章_存储过程与函数(创建存储过程、调用存储过程、存储函数的使用、存储过程和函数的查看、修改、删除)
    Reactor网络模式
    html实现竖直步骤条
    CS配合frp上线
    JS操作dom元素(一)——获取DOM节点的六种方式
    PHP代码审计系列(一)
    探索性能驱动的模拟 IC 布局的机器学习方法
    vue 微信登录
    泛型「generic」讲解
    GIS实战应用案例100篇(七十九)-多规整合底图的制作要点
  • 原文地址:https://blog.csdn.net/weixin_44727080/article/details/125988527