这是个bug么?
是有缓存的 好像是1分钟 我看过源码的 下面是源码 希望对你有帮助
// 主页的缓存工作 var queryCache = {}; setInterval(function () { queryCache = {}; }, 1000 * 60 * 1); // 一分钟更新一次
var topicsCache = {}; setInterval(function () { var limit = config.list_topic_count; // 只缓存第一页, page = 1 var options = { skip: (1 - 1) * limit, limit: limit, sort: [ [‘top’, ‘desc’ ], [ ‘last_reply_at’, ‘desc’ ] ] }; var optionsStr = JSON.stringify(options); Topic.getTopicsByQuery({}, options, function (err, topics) { topicsCache[optionsStr] = topics; return topics; }); }, 1000 * 5); // 五秒更新一次 // END 主页的缓存工作
@qihuiqiang2008 有些贴回复,好像马上会更新次序的,呵呵
@qihuiqiang2008 你的代码老了
@alsotang 不会啊 是最新的 我刚又看了一下,下面是site.js的全部代码 显示是2014年7月4日的
/**
- Module dependencies. */
var User = require(’…/proxy’).User; var Topic = require(’…/proxy’).Topic; var config = require(’…/config’).config; var EventProxy = require(‘eventproxy’);
// 主页的缓存工作 var queryCache = {}; setInterval(function () { queryCache = {}; }, 1000 * 60 * 1); // 一分钟更新一次
var topicsCache = {}; setInterval(function () { var limit = config.list_topic_count; // 只缓存第一页, page = 1 var options = { skip: (1 - 1) * limit, limit: limit, sort: [ [‘top’, ‘desc’ ], [ ‘last_reply_at’, ‘desc’ ] ] }; var optionsStr = JSON.stringify(options); Topic.getTopicsByQuery({}, options, function (err, topics) { topicsCache[optionsStr] = topics; return topics; }); }, 1000 * 5); // 五秒更新一次 // END 主页的缓存工作
exports.index = function (req, res, next) { var page = parseInt(req.query.page, 10) || 1; var limit = config.list_topic_count;
var proxy = EventProxy.create(‘topics’, ‘tops’, ‘no_reply_topics’, ‘pages’, function (topics, tops, no_reply_topics, pages) { res.render(‘index’, { topics: topics, current_page: page, list_topic_count: limit, tops: tops, no_reply_topics: no_reply_topics, pages: pages }); }); proxy.fail(next);
// 取主题 var options = { skip: (page - 1) * limit, limit: limit, sort: [ [‘top’, ‘desc’ ], [ ‘last_reply_at’, ‘desc’ ] ] }; var optionsStr = JSON.stringify(options); if (topicsCache[optionsStr]) { proxy.emit(‘topics’, topicsCache[optionsStr]); } else { Topic.getTopicsByQuery({}, options, proxy.done(‘topics’, function (topics) { return topics; })); } // 取排行榜上的用户 if (queryCache.tops) { proxy.emit(‘tops’, queryCache.tops); } else { User.getUsersByQuery( {’$or’: [{is_block: {’$exists’: false}}, {is_block: false}]}, { limit: 10, sort: [ [ ‘score’, ‘desc’ ] ] }, proxy.done(‘tops’, function (tops) { queryCache.tops = tops; return tops; }) ); } // 取0回复的主题 if (queryCache.no_reply_topics) { proxy.emit(‘no_reply_topics’, queryCache.no_reply_topics); } else { Topic.getTopicsByQuery( { reply_count: 0 }, { limit: 5, sort: [ [ ‘create_at’, ‘desc’ ] ] }, proxy.done(‘no_reply_topics’, function (no_reply_topics) { queryCache.no_reply_topics = no_reply_topics; return no_reply_topics; })); } // 取分页数据 if (queryCache.pages) { proxy.emit(‘pages’, queryCache.pages); } else { Topic.getCountByQuery({}, proxy.done(function (all_topics_count) { var pages = Math.ceil(all_topics_count / limit); queryCache.pages = pages; proxy.emit(‘pages’, pages); })); } };