学习NodeJs之【如何连接Redis获取数据库缓存】

一、需求场景

在某个功能模块里,产品提出:需要显性展示关闭操作后的进度,如下图。

二、思路来源

既然是个实时获取的进度值,首先要考虑性能。

如果能够从前端直接连接Redis,通过约定的KEY获取缓存里的数值,再好不过。

2.1 redisGet方法 + id

1)连接Redis

const redis = require('redis');
const { REDIS } = require('../config/config.js');
const client = redis.createClient({
    host: REDIS.host,
    port: REDIS.port,
    password: REDIS.password,
    db: REDIS.database
});

const redisGet = (param) => {
    return new Promise((resolve, reject) => {
        client.get(param, (err, reply) => {
            if (err) {
                reject(err);
            }
            if (reply) {
                resolve(reply.toString());
            } else {
                reject();
            }
        });
    });
};

module.exports = { client, redisGet };

2)组装KEY值并发出请求

let tenantId = req.session.userInfo.tenantId;
let id = req.query.id;
try {
    const redisResult = await redisGet(`126:accountprogress:${tenantId}:${id}`);
    const redisResultObj = redisResult ? JSON.parse(redisResult) : {};
    LogUtil.proxy(`redisKEY--------------【SUCCESS】126:accountprogress:${tenantId}:${id}`);
    LogUtil.proxy(`redisResult-----------${redisResult}`);
    let str = '';
    let error = 1;
    if (redisResultObj && redisResultObj.code === '12600000') {
        // 接收成功
        str = redisResultObj.result;
    } else {
        // 接收失败
        str = redisResultObj.result || '';
        error = 2;
    }
    res.render(`${tenantpath}/accountperiodarchives/progress`, {
        htmltype: 'accountperiodarchiveshome',
        str: str,
        errorcode: error
    });
} catch (error) {
    // 已无缓存
    LogUtil.proxy(`redisKEY-------【ERROR】126:accountprogress:${tenantId}:${id}`);
    res.render(`${tenantpath}/accountperiodarchives/progress`, {
        htmltype: 'accountperiodarchiveshome',
        str: '进度获取失败,请重试!',
        errorcode: 3
    });
}

3)展示获取的result

2.2 调取progress.ejs

实现逻辑完成后,什么时候调取、如何调取?—— 获取账期列表时发起,通过定时器发起。

- 进度属于中间状态,位于未记账和已关账之间。这种数据有且仅有一条:

 - 确认账期id后,通过returnHTML渲染 记账进度模块,也就是progress.ejs内容:

- 之后,通过3秒定时器开始实时获取:

2.3 思路来源

        参考项目使用的 前端服务器 概念,获取记账进度的实现思路相当于封装一个ajax请求,获取html。

function returnHtml(url, data, fn) {
    $.ajax({
        url: '/rpsm-web' + url,
        type: 'get',
        dataType: 'html',
        data: data,
        complete: function (xhr) {
            fn && fn(xhr.responseText);
        }
    });
}

 把router注册的 /accountPeriodArchives/progress 当做接口,用returnHtml调用:

router.get('/accountperiodarchives/progress', async (req, res, next) => {
    ...
});

 三、总结

        目前项目还是基于nodeJs在开发,连接redis获取缓存key的方式仅供参考。

        欢迎路过指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值