关于SbWebServer页面缓存的设计攻略教程_缓存指南教程

对于一个网站页面来说,不同的页面被访问的可能性不同,像主页被访问的概率是最大的。如果利用这个特点,对高访问概率的页面存入缓存,这样每次连接过来就不用每次都要经历本地找文件,打开这样一个过程。对于这个缓存的设计,首先考虑:1.主页一定是一直在缓存中的。2.用一个哈希表来建立filename—>文件在内存中地址的映射。3.用shared_ptr来指向文件地址

关于SbWebServer页面缓存的设计攻略教程

对于一个网站页面来说,不同的页面被访问的可能性不同,像主页被访问的概率是最大的。如果利用这个特点,对高访问概率的页面存入缓存,这样每次连接过来就不用每次都要经历本地找文件,打开这样一个过程。

关于SbWebServer页面缓存的设计攻略教程_缓存指南教程

对于这个缓存的设计,首先考虑:

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为度量。

海计划公众号
(0)
上一篇 2020/03/29 01:39
下一篇 2020/03/29 01:39

您可能感兴趣的内容

  • vue路由history模式刷新页面出现404问题基础知识教程_404小白攻略

    vue hash模式下,URL中存在’#’,用’history’模式就能解决这个问题。但是history模式会出现刷新页面后,页面出现404。解决的办法是用nginx配置一下。
    在nginx的配置文件中修改方法一:location /{root /data/nginx/html;index index.html index.htm;if (!-e $r

    2020/04/03
  • ssh端口转发的三种方式菜鸟教程下载_ssh入门基础

    ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自然而然的想到了ssh的端口转发也能实现内网穿透。再细想一下,发现 ssh隧道 、或者说 端口转发 ,竟然实现了正向代理 、 反向代理 和 内网穿透 三种常

    2020/03/24
  • prerender小白知识_一个兼容多种不同平台(包括Node,PHP和Ruby)的一个服务

    prerender小白知识 官方网址:https://prerender.io/ GitHub:https://github.com/prerender/prerender 简介描…

    2020/03/06
  • 原生JS使用Blob导出csv文件小白指南_文件小白知识

    最近在做关于文件下载的需求:前端调用接口,然后对返回数据进行过滤、格式化,然后按表格内容拼接生成csv文件,让用户下载。具体实现方式如下:let sourceData = {head: [ ‘时间‘, ‘成交价格‘, ‘成交数量‘, ‘手续费‘, ‘成交金额‘, ],data: [{time: ‘2019-10-17 14:54:52‘, tradePric

    2020/03/22
  • 一文看懂中国互联网二十年小白基础_互联网基础入门

    以史为镜,可以知兴替。中国互联网,沧海桑田。1、最早在美国上市的中国互联网公司是中华网,域名牛逼,中国概念,一度股价爆高到100多美元,后来一路跌到地板,然后退市,现在,谁还记得呢。2、曾经联想搞了一个fm365.com,联想的互联网战略,非常非常早的事情,随着联想电脑预装铺开,一度号称是国内门户前几名,然后呢?后来一度域名都丢了,然后也没有然后了。3、我们

    2020/04/05
  • jExcel指南攻略_创建基于 Web 的电子表格应用

    jExcel指南攻略 官方网址:https://www.oschina.net/p/jexcel 简介描述:创建基于 Web 的电子表格应用 jExcel CE是一个非常简单,完全…

    2020/03/11
  • JS 中的垃圾回收攻略教程_js知识新手入门

    对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。当某个东西我们不再需要时会发生什么?JavaScript 引擎如何发现它、清理它?可达性JavaScript 中主要的内存管理概念是可达性。简而言之,『可达』值是那些以某种方式可访问或可用的值。它们保证存储在内存中。这里列出固有的可达值基本集

    2020/03/29
  • ES2020新功能基础指南_功能使用说明

    自 2015 年发布 ES6 以来,JavaScript 一直在快速发展,每次迭代中都会出现大量新功能。 JavaScript 语言规范的新版本每年更新一次,新语言功能建议的定稿比以往更快。这意味着新功能将以前所未有的速度被整合到现代浏览器和其他 JavaScript 运行时引擎(如 Node.js)中。在 2019年,“Stage 3”阶段有许多新功能,这

    2020/03/23
  • 阿里西西使用攻略_js特效,网页特效,网站模板

    阿里西西使用攻略 官方网址:http://www.alixixi.com/ 简介描述:js特效,网页特效,网站模板 阿里西西是国内专业的网页制作教程和web开发资源下载的网站,主要…

    2020/03/06
  • React Native之启动流程小白知识_流程小白常识

    JS 程序的入口,将当前 APP 对象注册到 AppRegistry 组件中, AppRegistry 组件是 js moduleimport { AppRegistry } from ‘react-native’…省略代码AppRegistry.registerComponent(‘demo’, () => Index)启动流程我们新建一个RN的项目,

    2020/03/23
  • FileSaver.js基础指南_基于 HTML5 的导出文本并下载到本地文件的库

    FileSaver.js基础指南 官方网址:https://eligrey.com/blog/saving-generated-files-on-the-client-side/ …

    2020/03/06
  • react-native-vector-icons入门攻略_React Native的自定义图标支持

    react-native-vector-icons入门攻略 官方网址:https://oblador.github.io/react-native-vector-icons/ Gi…

    2020/03/10
  • HTML5语义化元素你真的用的正确吗?入门教程_元素新手入门

    HTML5语义元素语义学是研究语言中单词和短语的含义。语义元素=具有意义的元素。 语义元素清楚地描述了它对浏览器和开发人员的意义。 非语义元素的示例:和– 对其内容一无所知。 语义元素的示例:,

    和- 清楚地定义其内容。 所有现代浏览器都支持HTML5语义元素。HTML5新语义元素许多网站都包含

    2020/03/29
  • sentinel.js菜鸟知识_使用 CSS 选择器检测新的 DOM 节点的js库

    sentinel.js攻略教程 官方网址:https://github.com/muicss/sentineljs GitHub:https://github.com/muicss…

    2020/03/06
  • CSS3中的渐变效果基础知识教程_渐变教程视频

    渐变是CSS3中比较丰富多彩的一个特性,通过渐变我们可以实现许多绚丽的效果。渐变可分为线性渐变和径向渐变。(1)线性渐变:沿着某条直线朝一个方向产生渐变效果语法:linear-gradient([ || angle]? ,[,]*)参数说明:第一个参数表示线性渐变的方向。有四个取值,分别是:to left:设

    2020/03/22
  • Mac谷歌(chrome)浏览器快捷键入门攻略_快捷键基础指南

    1. 标签页和窗口快捷键⌘-N打开新窗口。⌘-T打开新标签页。⌘-Shift-N在隐身模式下打开新窗口。按 ⌘-O,然后选择文件。在 Chrome 浏览器中打开计算机中的文件。按住 ⌘ 的同时点击链接。或用鼠标中键(或鼠标滚轮)点击链接。从后台在新标签页中打开链接。按住 ⌘-Shift 的同时点击链接。或按住 Shift 键的同时用鼠标中键(或鼠标滚轮)点击

    2020/03/29