缓存系列之一:buffer、cache与浏览器缓存

一:缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度太快了,CPU需要的数据硬盘往往不能在短时间内满足CPU的需求,因此PCU缓存、内存、Raid 卡以及硬盘缓存就在一定程度上满足了CPU的数据需求,即CPU 从缓存读取数据可以大幅提高CPU的工作效率。

1.1:理解buffer和cache:
buffer:缓冲也叫写缓冲,一般用于写操作,可以将数据先写入内存在写入磁盘,buffer 一般用于写缓冲,用于解决不同介质的速度不一致的缓冲,先将数据临时写入到里自己最近的地方,以提高写入速度。
CPU会把数据线写到内存的磁盘缓冲区,然后就认为数据已经写入完成看,然后内核的线程在后面的时间在写入磁盘,所以服务器突然断电会丢失内存中的部分数据。
cache:缓存也叫读缓存,一般用于读操作,CPU读文件从内存读,如果内存没有就先从硬盘读到内存再读到CPU,将需要频繁读取的数据放在里自己最近的缓存区域,下次读取的时候即可快速读取。

1.2:cache的保存位置:
客户端:浏览器
内存:本地服务器、远程服务器
硬盘:本机硬盘、远程服务器硬盘
速度对比:
客户端浏览器-内存-远程内存-硬盘-远程硬盘

1.3:cache的特性:

1.过期时间
2.强制过期,源网站更新图片后CDN是不会更新的,需要强制是图片缓存过期
3.命中率,即缓存的读取命中率

1.4:将内存的数据保存到硬盘,然后清空内存,可能有些内存的数据是进程死掉无法释放的:
#sync # 将缓冲区中的数据快速写入到硬盘
# cat /proc/sys/vm/drop_caches
0
#1是用来清空最近放问过的文件页面缓存
#2是用来清空文件节点缓存和目录项缓存
#3是用来清空1和2所有内容的缓存。

二:用户层缓存:
2.1:DNS 缓存:
2.1.1:默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析:
查看chrome浏览器的DNS缓存:
chrome://net-internals/#dns

2.1.2:DNS 预获取,仅在HTML 5中支持,当一个页面中包含多个域名的时候浏览器会先尝试解析域名并进行缓存,之后再使用的时候即可直接只有不需要再进行DNS 解析:

2.2:浏览器缓存:
2.2.1:火狐浏览器的缓存位置:

2.2.2:文件的访问时间、最后修改时间和更改时间:

# stat index.php
File: ‘index.php’
Size: 4311 Blocks: 16 IO Block: 4096 regular file
Device: fd01h/64769d    Inode: 68497957 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 497/ nginx) Gid: ( 497/ nginx)
Access: 2017-07-21 02:00:03.046492759 +0800    # 最后一次读取的时间
Modify: 2016-04-07 18:32:47.000000000 +0800    # 最后一次更改内容导致block内容发生变化的时间
Change: 2017-01-11 15:55:35.872038074 +0800    # 权限等发生更改导致inode发送变化的时间

2.2.3:缓存协商机制之最后修改时间:系统调用会获取文件的最后修改时间,如果没有发生变化就返回给浏览器304的状态码,表示没有发生变化,然后浏览器就使用的本地的缓存展示资源


2.2.4:缓存协商之Etag:
浏览器在返回的报文中包含一个etag的标记,然后浏览器将etag保存,再次收到Etag的时候会进行判断,如果Etag没有发生变化就使用本地缓存

2.2.5:缓存协商之过期时间,以上两种都需要发送请求,即不管资源是否过期都要发送请求进行协商,这样会消耗不必要的时间,因此有了缓存的过期时间,即第一次请求资源的时候带一个资源的过期时间,默认为30天,当前这种方式使用的比表较多,但是无法保证客户的时间都是准确并且一致的,因此假如一个最大生存周期,使用用户本地的时间计算缓存数据是否超过多少天,下面的过期时间为2017年,但是缓存的最大生存周期计算为天等于691200秒即2天,过期时间如下:

最大生存周期,单位为秒,根据客户端的时间往后计算是否超出缓存天数

三:关于刷新:
3.1:在浏览器输入地址栏直接按回车:
浏览器的所有没有过期的数据直接使用本地缓存,即没有过期的数据不会发送缓存协商的请求。

3.2:按F5或者浏览器上的刷新按钮:
浏览器会在请求头部附加缓存协商报文,浏览器不能直接使用本地缓存,需要通过验证才可以使用,但是过期时间没有超过日期的缓存不受影响,受影响的是最后修改时间和Etag。

3.3:ctrl+F5或者是按住ctrl+刷新,这是强制刷新,浏览器将发送所有的请求到服务器,不会使用本地缓存

3.4:如何让客户端获取最新的服务器数据资源:

3.4.1:更改资源名称,这样每次都得改,比较麻烦而且容易出错

3.4.2:增加时间戳,新版本的使用较新的时间戳,浏览器发现时间较新就会获取新的资源,例如xxx.js?20170724比xxx.js?20170101新

3.4.3:静态资源使用CDN要加参数,比如URL 可以带参数,带参数的话CND会对该url进行hash计算,当源url资源发送变化(故意的把参数更改,因为静态资源更新了,要求CND也更新)CDN 发现hash值不一样就会进行更新,另外CDN 可以根据后缀名判断加不加参数,即某些后缀的有参数有些后缀没有参数

转载于:https://www.cnblogs.com/reblue520/p/7327273.html

缓存系列之一:buffer、cache与浏览器缓存相关推荐

  1. Chrome 技术篇-F12开发者工具清理缓存,高级、专业清浏览器缓存,storage和cache都指什么、区别

    作为一名开发,作为一名技术人员,直接用浏览器清缓存的话会显的不够专业. 开发者工具清理的好处: 它可以很清晰的清理对应的缓存,让我们知道哪些缓存对我们的哪些代码有影响,提高我们对整体代码的把控,提升我 ...

  2. linux buffer 刷到磁盘,Linux下的磁盘缓存 linux page buffer cache深入理解

    延伸:linux page buffer cache深入理解 描述:...么我们在分析io问题的时候可能会更加得心应手. Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会 ...

  3. Buffer Cache(缓冲区缓存)篇:keep pool(保留池)

    Buffer  Cache可以有三个池 默认缓冲区池 keep缓冲区池 recycle缓冲区池 --保留池和回收池可以独立于sga中的其他缓存分配内存.创建表的时候可以在storage子句中使用buf ...

  4. 360浏览器清除缓存_手机微信内置浏览器缓存清理指南

    点击上方蓝字关注我们 手机微信内置浏览器缓存清理指南 各位老师,关于健康打卡系统有部分老师无法看到"每日测温"功能的问题,主要出现在用微信扫一扫打开系统时,这是由于微信内置浏览器的 ...

  5. .Net内部缓存System.Web.Caching.Cache 和Redis缓存缓存工厂切换

    有个问题,以前系统采用的是System.Web.Caching.Cache 但是redis缓存的流行 分布式的流行,缓存就被切换了. 但是在redis缓存的环境需要配置,有时候要切换回来. 这时候就弄 ...

  6. 浏览器缓存Cache

    首先缓存的优点是:缓解服务端压力:快. 强缓存和协商缓存 强缓存是从本地缓存数据表中去取资源,不向服务端发送请求:协商缓存意思是每次使用缓存前都要和服务端进行确认. 从Response Header的 ...

  7. 如何不让浏览器读取html缓存,不让浏览器缓存index.html

    参考文档:https://www.2cto.com/ask/question/4598 location = /index.html { add_header Cache-Control " ...

  8. 通过 Node.js 小示例学习浏览器缓存策略

    单纯讲一些理论性的东西可能会很难理解,本文结合一些 Node.js 小示例来学习浏览器缓存策略. 在后端为了加速服务的访问速度,通常可以使用 Memcached.Redis 做数据缓存,那么在浏览器端 ...

  9. 清除浏览器缓存之后为什么还是显示旧的html页面_H5缓存机制浅析-移动端Web加载性能优化...

    1 H5缓存机制介绍 H5,即HTML5,是新一代的HTML标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5引入的离线存储,这意味着 web 应用可进行缓存,并可在没 ...

最新文章

  1. Java总复习(二)
  2. 在WPF中使用WinForm控件方法
  3. PHP去掉诡异的BOM \ufeff JSON开头包含红点
  4. 计算机绘图的展望,计算机绘图技的术发展与展望.doc
  5. ios怎么引入masonry_iOS Masonry的使用需要注意的地方
  6. 雷林鹏分享:PHP 实例 - AJAX 与 XML
  7. hls ask 调制
  8. brew彻底卸载mysql
  9. matlab画全连接网络,无标度网络及MATLAB建模.pdf
  10. python实现将整数转换为罗马数字
  11. C++:CMake常用变量【CMAKE_CXX_FLAGS、CMAKE_BUILD_TYPE、×_BINARY_DIR】
  12. jquery 抓取微博_使用jQuery和RegexJavaScript进行客户端网络抓取
  13. mb是做1还是0_新手爸妈看过来:0-1岁宝宝这样做早教,省钱省心又实用
  14. 鸿蒙天钟小白图片,果然又一令人震惊的取名方式-“小白”
  15. 25万美金奖励章鱼加速器2022冬季获胜团队!
  16. scylladb 4.1 分布式安装部署
  17. 0 1背包 填表实现
  18. 2006年德国世界杯分组对阵图
  19. 被吐槽为“智商税”,老金磨方们的中式养生招牌还能挂多久?
  20. 【与】、【或】、【异或】运算

热门文章

  1. 中专科学计算机应用基础试题及答案,职业中专《计算机应用基础》期中考试试卷...
  2. 均值定理最大值最小值公式_如何理解中值定理?三大微分中值定理的几何意义及其证明介绍。...
  3. 通过带数据盘的自定义镜像来创建使用应用程序网关的虚拟机规模集
  4. Android笔记(三十六) AsyncTask是如何执行的?
  5. windows重绘机制原理
  6. IOS开发基础之截图、图片文字水印
  7. abc类ip地址_通信网络的IP地址分配原理
  8. rabbitmq怎么停止_rabbitmq 启动与停止
  9. 阿尔伯塔大学的计算机科学专业好吗,阿尔伯塔大学哪个专业好?三大热门方向成就高薪未来...
  10. linux p2p视频播放器,avplayer: 一个基于FFmpeg、libtorrent的P2P播放器实现.