缓存实时更新
发布于 8 年前 作者 Asher-Tan 5230 次浏览 来自 问答

缓存策略的问题,现在是查询出的列表第一次缓存起来,再次查询就直接去缓存。但如果后台删除、更新了列表中某项内容如何实时更新缓存呢? 我现在是把整个列表缓存删掉,但这样做感觉不太好。有没有可以只更新缓存中指定的项。 望大神们指导!

6 回复

nodeclub首页列表应该也有缓存吧!这个缓存策略是怎么做的?

@Asher-Tan nodeclub 首页好像是每隔一段时间缓存整个首页,列表更新也不失效;以前读代码记得应该是这样

@chita 每隔一段时间? 但增加一条记录能马上显示出来啊,如果是缓存更新的话那就时间很短啊

更新的时候把指定项的缓存删了不就行了,能取自然能删吧。

@Hanggi 存放缓存是一个大字符串啊,而且还有不同的查询条件产生的内容。不好删啊

@Asher-Tan 应该是足够短? 以前的代码是

// 主页的缓存工作。主页是需要主动缓存的
function indexCache() {
  if (config.debug) {
    return;
  }
  var limit = config.list_topic_count;
  // 为所有版块(tab)做缓存
  [['', '全部']].concat(config.tabs).forEach(function (pair) {
    // 只缓存第一页, page = 1。options 之所以每次都生成是因为 mongoose 查询时,
    // 会改动它
    var options = { skip: (1 - 1) * limit, limit: limit, sort: '-top -last_reply_at'};
    var tabValue = pair[0];
    var query = {};
    if (tabValue) {
      query.tab = tabValue;
    }
    var optionsStr = JSON.stringify(query) + JSON.stringify(options);
    Topic.getTopicsByQuery(query, options, function (err, topics) {
      cache.set(optionsStr, topics);
    });
  });
}
setInterval(indexCache, 1000 * 5); // 五秒更新一次

现在不知道了

回到顶部