2016-09-21 64 views
0

我正在尝试在我的webapp中引入最简单的缓存层,我想要做的就是缓存24小时查询的结果,因为这是数据库接收新数据的频率数据。我试图使用节点缓存管理器(看起来很棒),但挣扎!我不认为我完全理解它应该如何实施到续集。这个例子是用猫鼬和蒙戈通过它的外观:使用节点缓存管理器对续集缓存

function responder(res) { 
    return function respond(err, data) { 
     var startTime = moment(res.req._startTime); 
     var diff = moment().diff(startTime, 'ms'); 

     if (err) { 
      err.status = 500; 
      res.render('error', {error: err}); 
     } else { 
      data.requestTime = diff; 
      res.render('users/show', data); 
     } 
    }; 
} 

function fetchUser(id, cb) { 
    var cacheKey = 'user_' + id; 

    memoryCache.wrap(cacheKey, function (cacheCb) { 
     console.log("Fetching user from slow database"); 
     User.get(id, cacheCb); 
    }, cb); 
} 

router.get('/:id', function (req, res) { 
    fetchUser(req.param('id'), responder(res)); 
}); 

我使用的MySQL,目前拥有下面的例子,但我可以看到,查询每一次进入数据库,它似乎并没有被坚持或创建缓存...:

function responder(res) { 
    return function respond(err, data) { 
     var startTime = moment(res.req._startTime); 
     var diff = moment().diff(startTime, 'ms'); 

     if (err) { 
      err.status = 500; 
      res.json({valuesCount: err}); 
     } else { 
      data.requestTime = diff; 
      res.json({valuesCount: res}); 
     } 
    }; 
} 

function fetchCount(req, cb) { 
    var cacheKey = 'allDatabaseRecords', 
     table = sequelize.import('extracts'); 

    memoryCache.wrap(cacheKey, function (cacheCb) { 
     console.log("Fetching count from slow database"); 
     table.count().then(cacheCb); 
    }, cb); 
} 

router.post('/extract-tool/data-filter', function(req, res) { 
    var table = sequelize.import('extracts'); 

    fetchCount(req, responder(res)); 
}); 

我已经试过了文档和例子以下,但这如前所述,这仍然命中每次DB!任何帮助都是无比的赞赏!

回答

0

我不能按照给出的例子来工作,我必须每次都专门设置并从缓存中获取键值对。

现在,它做工精细,结构如下:

memoryCache.get(cacheKey, function(err, result) { 
    if (result !== undefined){res.json({billingAddress12LastName: result});} 
}); 

memoryCache.wrap(cacheKey, function (cacheCb) { 
    console.log("Fetching count from slow database"); 
    table.count().then(data); 
    memoryCache.set(cacheKey, data, {ttl: ttl}, function(err) { 
     res.json({valuesCount: data}); 
    }); 
}, cb); 

还是不明白的包装功能是如何工作的以及它的,因为我明确地设置和现在得到缓存值,希望得到一些评论仍然:)。