缓存技术介绍
缓存是为了调节速度不一致的两个或多个不同的物质速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用。例如,CPU的一级、二级缓存是保存了CPU最近经常访问的数据;内存是保存CPU经常访问硬盘的数据;而且硬盘也拥有缓存,甚至物理服务器的raid卡也有缓存,都是为了起到加速CPU访问硬盘数据的目的。因为CPU的速度较快,CPU需要的数据由于硬盘往往不能在短时间内满足CPU的需求,因此以上的所有都是为了提高CPU访问硬盘的速度,可以大幅度提升CPU的工作效率。
一、系统缓存
1、buffer和cache
buffer:缓冲也被称为写缓冲,一般用于写操作。可以将数据先写入内存再写入磁盘,buffer主要用于写缓冲,用于解决不同介质的写入速度不同的问题导致的缓冲。先将数据写入离自己最近的地方,以提高写入速度,CPU会将数据先写入到内存的磁盘缓冲区,然后传递给外界自己的数据已经写入完成,然后由内核在后续的时间在写入磁盘。
cache:缓存也被叫做读缓存,一般用于读操作。CPU读取文件从内存读,如果内存没有就先从硬盘读入到内存在读到CPU,将需要频繁读取的数据放置到离自己最近的缓存区域,下次读取就可以快速读取。
2、cache保存的位置
客户端:浏览器
内存:本地服务器、远程服务(如:redis、memcache)
硬盘:本地硬盘、远程服务器硬盘(如:NFS存储)
3、cache的特性
①、自动过期:给缓存的数据加上有效时间,超出时间后自动过期删除。
②、强制过期:源网站更新图片后CDN不会更新,需要强制图片缓存过期
③、命中率:即缓存的读取命中率
二、用户层缓存
1、DNS缓存
默认为60秒,即60秒之内访问同一个域名就不在进行DNS解析。
2、浏览器缓存
介绍浏览器的缓存过期机制。一个是使用文件最后修改时间,即系统调用文件的时候会获取文件的最后修改时间,和本地浏览器缓存中的文件时间相比,如果没有发生变化就返回给浏览器304的状态码(返回文件最后修改时间),表示没有发生变化,浏览器仍使用本地的缓存展示资源。二是基于Etag标记是否一致判断页面是否发生变化。以上这两种方法都需要发送请求,即资源是否过期都需要发送请求进行协商,但这样会消耗一些不必要的时间,因此出现了缓存的有效时间,即第一次请求资源响应报文带有资源的过期时间,默认三十天;但由于可能会出现客户时间不一致,所以加入一个最大生存周期,判断资源过期时间。
三、其他层面得缓存
1、CPU缓存
CPU缓存(L1的数据缓存【Data Cache,D-Cache】和L1的指令缓存【Instruction Cache,I-Cache】)、二级缓存、三级缓存
CPU缓存即一级缓存,L1的数据缓存【Data Cache,D-Cache】和L1的指令缓存【Instruction Cache,I-Cache】二者分别用来存放数据以及对执行这些数据的指令进行即时解码。大多数CPU的一级数据缓存和一级指令缓存具有相同的容量,例如AMD的Athlon XP就具有64KB的一级数据缓存和64KB的一级指令缓存,其一级缓存就以64KB 64KB来表示,其余的CPU的一级缓存表示方法以此类推。
L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2缓存容量也会影响CPU的性能,原则是越大越好,现在家庭用CPU容量最大的是4MB,而服务器上用CPU的L2高速缓存普遍大于4MB,有的高达8MB或者19MB。
三级缓存是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。三级缓存的应用可以进一步降低内存延迟,同时提高大数据量计算器处理器的性能。
一级缓存和二级缓存的比较
一级缓存和 二级缓存用于存储数据的缓存部分被称为RAM。掉电之后这部分中的信息就会消失。RAM又分为两种,一种是静态RAM(SRAM),另一种是动态RAM(DRAM)。静态RAM的存储速度要大于动态RAM,我们使用的内存大多数为动态RAM。CPU的一级缓存通常都是使用静态RAM,速度快,但是集成度低(存储相同的数据,静态RAM的体积是动态RAM的六倍),造价昂贵。
2、cookie和session
注:(cookie和session都可以设置过期时间)
cookie是访问某些网站以后再本地存储的一些网站相关信息,下次在访问是会减少一些步骤,比如账号等。cookies是服务器在客户端浏览器上存储的小段文本并随每个请求发送至同一个服务器,是一种实现客户端保持状态的方案。
session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当浏览器请求http地址时,可以基于之前的session实现回话保持、session共享等。
cookie与session的区别
- cookie以文本文件格式存储在浏览器中,而session存储在服务端。
- cookie的存储限制了数据量,只允许4KB,而session是无限制的。
- cookie包含在每一个客户端请求报文中,因此容易被人捕获。
Web缓存知识体系-V3.0 赵舜东(赵班长) 【转载请注明来自于-运维社区】 | |||
缓存分层 | 缓存分级 | 内容 | 内容简介/主要技术关键词 |
用户层 | DNS | 浏览器DNS缓存 | Firefox默认60秒,HTML5的新特性:DNS Prefetching |
应用程序DNS缓存 | Java(JVM)、PHP语言本身的DNS缓存 | ||
操作系统DNS缓存 | 客户端操作系统DNS缓存 | ||
DNS缓存服务器 | 专用的DNS缓存服务器、LocalDNS缓存 | ||
浏览器 | 浏览器缓存 | HMTL5新特性:Link Prefetching | |
基于最后修改时间的HTTP缓存协商: Last-Modified | |||
基于打标签的HTTP缓存协商: Etag | |||
基于过期时间的HTTP缓存协商: Expires、cache-control | |||
代理层 | CDN | 反向代理缓存 | 基于Nginx+(Squid、Varnish、ATS)等,一般有多级 |
Web层 | 解释器 | Opcache | 操作码缓存 |
Web服务器 | Web服务器缓存 | Apache(mod_cache)、Nginx(FastCGI缓存、Proxy cache) | |
应用层 | 应用服务 | 动态内容缓存 | 缓存动态输出 |
页面静态化 | 动态页面静态化,需要专门用于静态化的CMS | ||
Local Cache | 应用本地缓存,PHP(Yac、Xcache) Java(ehcache) | ||
数据层 | 分布式缓存 | 分布式缓存 | Memcache、Redis等 |
数据库 | MySQL | MySQL自身缓存、innodb缓存、MYISAM缓存 | |
系统层 | 操作系统 | CPU Cache | L1(数据缓存、指令缓存) L2、L3 |
内存Cache | 内存高速缓存、Page Cache | ||
物理层 | Raid卡 | Raid Cache | 磁盘阵列缓存(Raid卡可以控制是否使用磁盘高速缓存) |
磁盘 | Disk Cache | 磁盘高速缓存 | |
备注 | 1.此体系结构仅包含读缓存(Cache),不包含写缓冲(Buffer),所有很多缓冲区没有列举。 2.根据用户发起一个HTTP请求开始,持续更新中,欢迎大家添加更多的内容。 |
该文档参考于:https://www.unixhot.com/page/cache
http://www.yunweipai.com/35458.html
本文来自博客园,作者:小楚同学,转载请注明原文链接:https://www.cnblogs.com/lucilleye/p/cache.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了