Node.js平缓存,何时清除缓存

时间:2018-04-21 07:16:32

标签: javascript node.js caching

我有一个查询MySQL数据库的Node.js服务器。它作为api端点,返回JSON以及我的Express应用程序的后端服务器,它将检索到的列表作为对象返回到视图。

我正在考虑实施flat-cache以增加响应时间。以下是代码段。

const flatCache = require('flat-cache');
var cache = flatCache.load('productsCache');

//get all products for the given customer id
router.get('/all/:customer_id', flatCacheMiddleware, function(req, res){
    var customerId = req.params.customer_id;

    //implemented custom handler for querying
    queryHandler.queryRecordsWithParam('select * from products where idCustomers = ? order by CreatedDateTime DESC', customerId, function(err, rows){
        if(err) {
            res.status(500).send(err.message);
            return;
        }
        res.status(200).send(rows);
    });
});

//caching middleware
function flatCacheMiddleware(req, res, next) {
    var key =  '__express__' + req.originalUrl || req.url;
    var cacheContent = cache.getKey(key);
    if(cacheContent){
        res.send(cacheContent);
    } else{
        res.sendResponse = res.send;
        res.send = (body) => {
            cache.setKey(key,body);
            cache.save();
            res.sendResponse(body)
        }

        next();
    }
}

我在本地运行了node.js服务器,缓存确实大大缩短了响应时间。

然而,我面临两个问题,我需要你的帮助。

  1. 在放入 flatCacheMiddleware 中间件之前,我收到了JSON中的响应,现在当我测试时,它会向我发送一个HTML。我不太熟悉JS严格模式(计划尽快学习),但我确信答案在于flatCacheMiddleware函数。
  2. 那么我在flatCacheMiddleware函数中修改了什么,它会发送给我JSON?

    1. 我手动为该客户的products表添加了一个新行,当我调用终点时,它仍向我显示旧行。那么我在什么时候清除缓存?

      在Web应用程序中,理想情况下是用户注销时,但如果我将其用作api端点(甚至在webapp上,则无法保证用户将以传统方式注销),我该如何操作确定是否已添加新记录并且需要清除缓存。

    2. 感谢帮助。如果有任何其他node.js缓存相关的建议,你们都可以给出,这将是真正有用的。

0 个答案:

没有答案