为什么使用缓存?一是加快用户查询响应速度,二是减少后台计算量。
对于一个正常的搜索流程,比如用户输入"搜索引擎 技术",搜索引擎需要分别将层次在磁盘上的两个单词的倒排索引读入内存,之后进行解压,然后求两个单词对应倒排列表的交集,找到
所有包含两个单词的文档集合,根据排序算法来对每个文档的相关性进行打分,按照相关度输出相关度最高的搜索结果。
缓存假设了,即:相同的用户查询会反复出现。
1.至少 63.5% 的搜索引擎用户只看搜索结果第1页的内容。大约 11.7% 的搜索引擎用户会翻看第2页;至少 79% 只看前3页。
2.用户发出的查询请求分布符合 Power-Law 规则,即少数查询占了查询总数的相当比例。
3.用户查询请求具备时间相关性。
11.1 搜索引擎缓存系统架构
当搜索引擎接收到用户查询请求时,会先在缓存系统中查找,看缓存内是否包含用户查询的搜索结果,如果发现缓存已经超出了相同的查询搜索结果,则从缓存内读出给用户;如果缓存
内没有找到相同的用户查询,则将用户查询按照常规处理方式交由搜索引擎返回结果,并将这条用户查询的搜索结果及中间数据根据一定的策略放入缓存中。
缓存系统包含2部分:缓存存储区和缓存策略管理。缓存管理策略又包含2个子系统,即缓存淘汰策略和缓存更新策略。
一个优秀的缓存系统,有几个优点:
1.最大化缓存命中率
2.缓存内容与索引内容保持一致性
11.2 缓存对象
对于搜索引擎缓存,对象可能是搜索结果,也可能是讴歌查询词汇对应的倒排类表,或者是一些中间的搜索结果。
11.3 缓存结构
最常见的是单级缓存,也可以是二级缓存,或者三级缓存。
11.4 缓存淘汰策略(Evict Policy)
动态策略和静态动态混合策略。
11.4.1 动态策略
动态策略的缓存数据完全来自于在线用户查询,基本思路是:对缓存项保留一个权重值,这个权重值根据查询命中情况动态调整。常见的动态策略:
LRU策略:最近最少使用策略
LandLord策略
SLRU 策略:大小自适应LRU
11.4.2 混合策略
缓和策略一方面来自于在线用户查询,另一方面来自于搜索日志等历史数据。
SDC 策略:静态动态混合缓存策略
AC 策略 :准入策略
11.5 缓存更新策略(Refresh Policy)