我正在处理一个项目,我需要从数据库中缓存不经常更新的对象。
就同步性而言,这是怎么回事?如果视图片段是在承诺内呈现的话,我是否会因为承诺而遇到竞争状态?这是否是可接受的做法,这是否真的有意义(假设许多对象在服务器上缓存如此)?
// array to cache objects
var gPopularTags = [];
// in the module init function
module.exports = function(app, models){
gModels = models;
updateTopTags();
setInterval(updateTopTags, 1000 * 3700);
// some route that makes use of the cached object
app.get('/', function(req, res){
res.render('index', {
tags: gPopularTags
}
});
};
// outside of the module init, a private function
function updateTopTags() {
gModels.Tag.findAll({
where: {
useCount: {
$gt: 0
}
},
order: [['useCount', 'DESC']],
limit: 5
}).then(function(tags){
gPopularTags = tags;
})
}
然后,与index一起使用的视图具有以下依赖于标记的代码。这些观点都是用翡翠写成的。
if tags
h1 Popular Tags
div.list-group
each tag in tags
a(href="/tag/#{tag.name}").list-group-item= tag.name
span.badge= tag.useCount
a(href="/tag").list-group-item More Tags