缓存更新策略( Refresh Policy)

2019-12-04 15:31:54  浏览:161  作者:老王

  如果搜索引擎的索引内容不发生变化,缓存的内容就总是和索引系统保持一致。但是搜索引擎索引经常更新,如果索引内容发生变化,而缓存内容不随着索引变动,会导致缓存内容和索引内容的不一致,这种不一致对于用户的搜索体验会造成负面影响。缓存更新策略就是通过一定的技术手段尽可能保持缓存内容和索引内容的一致性。

  目前很多搜索引擎使用简单的更新策略,即在搜索引擎比较繁忙的时候不考虑缓存更新问题,而等到搜索引擎请求很少的时候,比如午夜等时间段,将缓存内的内容批量进行更新,使缓存内容保持和索引内容的一致。这种简单策略适合索引更新不是非常频繁的应用场景,对于索引更新频繁的场景,需要相对复杂些的缓存更新策略。

  根据缓存内容和索引内容联系的密切程度,目前的缓存更新策略可以分为两种:缓存一素引密切耦合策略和缓存一索引非耦合策略。

  缓存一索引密切耦合策略在索引和缓存之间增加一种直接的变化通知机制,一旦索引内容发生变化则通知缓存系统,缓存系统根据一定的方法判断哪些缓存的内容发生了改变然后将改变的缓存内容进行更新,或者设定缓存项为过期,这样就可以紧密跟踪并反映索引变化内容。这种密切耦合策略在实际实现时是非常复杂的,因为频繁的索引更新导致频繁的缓存更新,对系统效率及缓存命中率都会有直接影响。图117是一个缓存一索引密切耦合策略的示意图。当有新的索引文档进入搜索引擎时,系统会对文档内容进行分析,抽取出文档中TF·DF得分较高的索引词汇,并将这些词汇及其得分传递给失效通知模块因为如果缓存中的查询包含这些索引词汇的话,很可能该文档将会使得缓存内容失效,失效通知模块会评估哪些缓存项需要进行内容更新,如果某项缓存项需要更新,则提取最新的缓存内容更新旧缓存项。

缓存更新策略( Refresh Policy)

  缓存一索引非耦合策略则使用相对简单的策略,当索引变化时并不随时通知缓存系统进行内容更新,而是给每个缓存项设定一个过期值( Time To Live),随砦时间流逝,缓存项会逐步过期。通过这种方式可以将缓存项和索引的不一致尽可能减小。雅虎的搜索引擎采用了缓存一索引非耦合策略来维护缓存内容的更新。

评论区

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

【随机新闻】

返回顶部