码迷,mamicode.com
首页 > Web开发 > 详细

关于SbWebServer页面缓存的设计

时间:2019-07-20 00:12:29      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:网站   地址   页面   打开   头部   仿函数   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为度量。

关于SbWebServer页面缓存的设计

标签:网站   地址   页面   打开   头部   仿函数   file   文件   关于   

原文地址:https://www.cnblogs.com/lxy-xf/p/11216089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!