标签:网站 地址 页面 打开 头部 仿函数 file 文件 关于
对于一个网站页面来说,不同的页面被访问的可能性不同,像主页被访问的概率是最大的。
如果利用这个特点,对高访问概率的页面存入缓存,这样每次连接过来就不用每次都要经历本地找文件,打开这样一个过程。
对于这个缓存的设计,首先考虑:
1.主页一定是一直在缓存中的。
2.用一个哈希表来建立filename--->文件在内存中地址的映射。
3.用shared_ptr来指向文件地址,这样不用担心内存泄露的问题。
所以缓存的结构为:unordered_map<string,shared_ptr<FileInfo*> >。
FileInfo为文件相关类。
4.FileInfo的设计:1.一个映射向内容的指针addr 2.一个文件大小的衡量size 3.一个统计度count用来统计这个页面被访问的次数。
5.cache满后的处理:
首先如果访问次数多了,cache就满了,如果简单的只是erase掉cache头部的FileInfo,这样如果满了后每次来一个链接都可能要erase一下,效率下降,且erase的页面是随机的,并不一定是低访问度的页面,甚至可能erase掉主页。
因此考虑在缓存类Cache中除缓存成员cache外还加入一个堆用于对不同访问次数的页面进行排序。
cache满后考虑同时在cache和堆中erase掉低访问度的页面,可以erase掉堆的一半。
6.堆的处理:
采用最大堆,这样直接删掉堆的后一半,依然仍是最大堆形式(是这样吗?)。
可以用STL自带的堆,堆中成员扔是FileInfo*,这个堆使用自定义的仿函数来作为排序的准则,这个仿函数的设计以FileInfo中的count为度量。
标签:网站 地址 页面 打开 头部 仿函数 file 文件 关于
原文地址:https://www.cnblogs.com/lxy-xf/p/11216089.html