缓存的概念

一、系统缓存

1.1 buffer 与 cache

buffer:缓冲也叫写缓冲,一般用于写操作,可以将数据先写入内存中的buffer再写入磁盘,用于解决不同介质的速度不一致的缓冲,先将数据临时写入到里自己最近的地方,以提高写入速度,CPU会把数据先写到内存的磁盘缓冲区,然后就认为数据已经写入完成看,然后由内核在后续的时间在写入磁盘,所以服务器突然断电会丢失内存中的部分数据。

cache:缓存也叫读缓存,一般用于读操作,内存将CPU需要频繁读取的数据放在cache缓存,下次CPU读取的时候即可快速读取。

1.2 cache保存的位置

客户端:浏览器
内存:本地服务器、远端服务器
硬盘:本机硬盘、远端服务器硬盘

1.3 cache的有效时间

自动过期:给缓存的数据加上有效时间,超出时间后自动过期删除
过期时间:强制过期,源网站更新图片后CDN是不会更新的,需要强制是图片缓存过期 一般网站更新要刷新CDN
命中率:即缓存的读取命中率

二、用户层缓存

2.1 DNS缓存

默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析
查看chrome浏览器的DNS缓存,URL:chrome://net-internals/#dns
查看火狐浏览器的DNS缓存,URL:about:cache

2.2 浏览器缓存机制

2.2.1匹配最后修改时间

浏览器第一次访问网站时,会获取文件的最后修改时间;
浏览器第二次访问网站时,会去匹配文件的最后修改时间;
如果文件的最后修改时间没有发生变化,就返回给浏览器304的状态码,然后浏览器就使用的本地的缓存展示资源。
在这里插入图片描述

2.2.2Etag标记

该功能可以基于Nginx的etag on开启。
第一次发送请求之后,会将response响应头部的Etag标记保存到本地。
第二次发送请求之后,收到Etag会进行判断,如果Etag没有发生变化就使用本地缓存。
在这里插入图片描述

2.2.3过期时间

以上两种都需要发送第二次请求,这样会消耗不必要的时间,因此有了缓存的过期时间。
第一次请求资源的时候带一个资源的过期时间,默认为30天,当前这种方式使用的比表较多,但是无法保证客户的时间都是准确并且一致的,因此会加入一个最大生存周期,使用用户本地的时间计算缓存数据是否超过多少天,下面的过期时间为2027年,但是缓存的最大生存周期计算为天等于3650天即10年。
在这里插入图片描述
一般只有变化比较小的图片,时间才会设置长一些。如果有CDN服务,需要刷新一下。

三、CDN缓存

3.1 什么是CDN

内容分发网络(Content Delivery Network),通过将服务内容分发至全网加速节点,利用全球调度系统使用户能够就近获取,有效降低访问延迟,提升服务可用性。
第一:降低机房的使用带宽,因为很多资源通过CDN就直接返回用户了。
第二:解决不同运营商之间的互联,因为可以让联通的网络访问联通让电信的网络访问电信,起到加速用户访问的目的。
第三:解决用户访问的地域问题,就近返回用户资源。

百度CDN:https://cloud.baidu.com/product/cdn.html 
阿里CDN:https://www.aliyun.com/product/cdn?spm=5176.8269123.416540.50.728y8n 
腾讯CDN:https://www.qcloud.com/product/cdn

3.2 用户请求CDN流程

提前对静态内容进行预缓存,避免大量的请求回源,导致主站网络带宽被打满而导致数据无法更新,另外CDN可以将数据根据访问的热度不同而进行不同级别的缓存,例如访问量最高的资源访问CDN 边缘节点的内存,其次的放在SSD或者SATA,再其次的放在云存储,这样兼顾了速度与成本。
在这里插入图片描述

3.3 CDN主要优势

提前对静态内容进行预缓存,避免大量的请求回源,导致主站网络带宽被打满而导致数据无法更新,另外CDN可以将数据根据访问的热度不同而进行不同级别的缓存,例如访问量最高的资源访问CDN 边缘节点的内存,其次的放在SSD或者SATA,再其次的放在云存储,这样兼顾了速度与成本。缓存-缓存到最快的地方如内存,缓存的数据准确命中率高,访问速度就快。

调度准确-将用户调度到最近的边缘节点 
性能优化-CDN 专门用于缓存响应速度快 
安全相关-抵御攻击 
节省带宽:由于用户请求由边缘节点响应,因此大幅降低到源站带宽。

四、应用层缓存

Nginx、Tomcat等web服务可以设置应用缓存以加速响应用户请求。

有些解释性语言比如PHP/Python/Java不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执行,因此字节码也是一种缓存。

(解释性语言—>编译字节码(缓存)—>解释器解释为机器码—>执行)

当程序代码上线后字节码没有更新的现象,需要先清理缓存。

五、其他层面的缓存

5.1 CPU缓存

CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存(CPU共享缓存)
在这里插入图片描述

5.2 Session 与 Cookie

Cookie是访问某些网站以后在本地存储的一些网站相关的信息,比如加密后的账户名密码等信息。
cookie可以实现每次登录直接被信任。

session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当浏览器请求http地址时,可以基于之前的session实现会话保持、session共享等。
session可以实现服务器识别用户,同一个session说明同一个用户。

第一次登录是没有session信息的,服务端会把session写入缓存服务器,作为session缓存共享。

cookie与session的区别:
1、Cookie以文本文件格式存储在浏览器中,而session存储在服务端(memcached或redis)。 
2、cookie的存储限制了数据量,只允许4KB,而session是无限制的。
3、cookie包含在每一个客户端请求报文中,因此容易被人捕获。 
4、cookie和session都可以设置过期时间。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值