服务器缓存技术
1. 浏览器缓存和服务器缓存
一、浏览器缓存
浏览器缓存即http缓存;浏览器缓存根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是 强制缓存 和 协商缓存 。
浏览器第一次请求资源的时候服务器会告诉客户端是否应该缓存资源,根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。如下图:
1.强制缓存 :浏览器会对缓存进行查找,并根据一定的规则确定是否使用缓存。
强制缓存的缓存规则?
HTTP/1.0 Expires 这个字段是绝对时间,比如2018年6月30日12:30,然后在这个时间点之前的请求都会使用浏览器缓存,除非清除了缓存。
这个字段的缺点就是只会同步客户端的时间,这就有可能修改客户端时间导致缓存失效。
HTTP/1.1 cache-Control 这个是1.1的时候替换Expires的,它会有几种取值:
public :所有内容都将被缓存(客户端和代理服务器都可缓存)
private :所有内容只有客户端可以缓存, Cache-Control的默认取值
no-cache :客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
no-store :所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
max-age=xxx (xxx is numeric) :缓存内容将在xxx秒后失效
比如max-age=500,则在500秒内再次请求会直接只用缓存。
优先性:cache-Control > Expires
如果同时存在,cache-Control会覆盖Expires。
这个字段的缺点就是:
如果资源更新的速度是秒以下单位,那么该缓存是不能被使用的,因为它的时间单位最低是秒。
如果文件是通过服务器动态生成的,那么该方法的更新时间永远是生成的时间,尽管文件可能没有变化,所以起不到缓存的作用。
上图中浏览器缓存中存在该资源的缓存结果,并且没有失效,就会直接使用缓存的内容。
上图中浏览器缓存中没有该资源的缓存结果和标识,就会直接向服务器发起HTTP请求。
2.协商缓存: 浏览器的强制缓存失效后(时间过期),浏览器携带缓存标识请求服务器,由服务器决定是否使用缓存。
服务器决定的规则?
控制协商缓存的字段有 Last-Modified / If-Modified-Since 和 Etag / If-None-Match。
①Last-Modified 是服务器返回给浏览器的本资源的最后修改时间。
当下次再次请求的时候,浏览器会在请求头中带 If-Modified-Since ,即上次请求下来的 Last-Modified 的值,
然后服务器会用这个值和该资源最后修改的时间比较,如果最后修改时间大于这个值,则会重新请求该资源,返回状态码200。
如果这个值和最后修改时间相等,则会返回304,告诉浏览器继续使用缓存。
② Etag 是服务器返回的一个hash值。
当下次再次请求的时候,浏览器会在请求头中带 If-None-Match ,即上次请求下来的 Etag 值,
然后服务器会用这个值和该资源在服务器的 Etag 值比较,如果一致则会返回304,继续使用缓存;如果不一致,则会重新请求,返回200。
二、服务器缓存
上面是一个简单的流程图:
用户1访问A页面,服务器解析A页面返回给用户1,同时在服务器内存上做一定映射,把A页面缓存在硬盘上面
用户2访问A页面,服务器直接根据内存上的映射找到对应的页面缓存,直接返回给用户2,这样就减少了服务器对同一页面的重复解析
服务器缓存和浏览器缓存的区别:
服务器缓存是把页面缓存到服务器上的硬盘里,而浏览器缓存是把页面缓存到用户自己的电脑里
Nginx服务器
Nginx是一个高性能的HTTP和反向代理服务器。具有非常多的优越性:
在连接高并发的情况下,Nginx是Apache服务器不错的替代品,Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。
Nginx提供了expires、etag、if-modified-since指令来实现浏览器缓存控制。
nginx -s reload#重新加载配置文件
nginx -s reopen#重新打开log文件
nginx -s stop#快速关闭nginx服务
nginx -s quit #优雅的关闭nginx服务,等待工作进程处理完所有的请求
Nginx设置静态文件的缓存过期时间
location ~.*\.(js|css|html|png|jpg)$ {
expires 3d;
}
expires 3d;//表示缓存3天
expires 3h;//表示缓存3小时
expires max;//表示缓存10年
expires -1;//表示永远过期。
如果设置为-1在js、css等静态文件在没有修改的情况下返回的是http 304,如果修改返回http 200
对于静态资源会自动添加ETag,可以通过添加etag off指令禁止生成ETag。如果是静态文件,那么Last-Modified值为文件的最后修改时间。
在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置。在常用的缓存设置里面有两种方式,都是使用add_header来设置:分别为Cache-Control和Pragma。
location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;
add_header Pragma no-cache;
}
nginx gzip压缩
使用 gzip 压缩可以降低网站带宽消耗,同时提升访问速度。
主要在nginx服务端将页面进行压缩,然后在浏览器端进行解压和解析,
目前大多数流行的浏览器都迟滞gzip格式的压缩,所以不用担心。
默认情况下,Nginx的gzip压缩是关闭的,同时,Nginx默认只对text/html进行压缩
gzip on;
ersio #开启gzip压缩输出
gzip_http_vn 1.0 ;#默认1.1
#其中的gzip_http_version的设置,它的默认值是1.1,就是说对HTTP/1.1协议的请求才会进行gzip压缩
#如果我们使用了proxy_pass进行反向代理,那么nginx和后端的upstream server之间是用HTTP/1.0协议通信的。
gzip_vary on ;
#和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,
#所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_comp_level 6;
#设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大 1-9
gzip_proxied any;
#Ngnix作为反向代理的时候启用
#expample:gzip_proxied no-cache;
# off – 关闭所有的代理结果数据压缩
# expired – 启用压缩,如果header中包含”Expires”头信息
# no-cache – 启用压缩,如果header中包含”Cache-Control:no-cache”头信息
# no-store – 启用压缩,如果header中包含”Cache-Control:no-store”头信息
# private – 启用压缩,如果header中包含”Cache-Control:private”头信息
# no_last_modified – 启用压缩,如果header中包含”Last_Modified”头信息
# no_etag – 启用压缩,如果header中包含“ETag”头信息
# auth – 启用压缩,如果header中包含“Authorization”头信息
# any – 无条件压缩所有结果数据
gzip_types text/html ;#压缩的文件类型
#设置需要压缩的MIME类型,非设置值不进行压缩
#param:text/html|application/x-javascript|text/css|application/xml
gzip_buffers 16 8k; #设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间
#设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间
# param1:int 增加的倍数
# param2:int(k) 后面单位是k
# example: gzip_buffers 4 8k;
# Disable gzip for certain browsers.
gzip_disable “MSIE [1-6].(?!.*SV1)”; #ie6不支持gzip,需要禁用掉ie6
2. 电脑缓存是什么
问题一:电脑缓存是什么意思 电脑缓存(狭义)
计算机由于CPU运算的很快,而运算从内存读取数据速度不够,导致瓶颈(形象点,瓶颈是细细的,大量数据通过会造成堵塞,速度减缓),于是现代计算机采用的缓存技术,即在CPU在处理数据时先从缓存中提取数据(缓存内置在CPU中,它与CPU的数据交换速度远大于内存),而缓存中的数据是从内存中提取的。
不管是什么缓存,它的原理都是一样的!快和慢之间通过缓冲带进行过渡!
问题二:缓存是什么意思呢? 电脑缓存又是什么意思呢? 缓存是指临时文件交换区,电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便。因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在忙完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给GPU用的缓存,硬盘上也有16M或者32M的缓存。千万不能把缓存理解成一个东西,它是一种处理方式的统称!
问题三:笔记本电脑缓存有啥用,什么意思 许多人认为,“缓存”是内存的一部分
许多技术文章都是这样教授的
但是还是有很多人不知道缓存在什么地方,缓存是做什么用的
其实,缓存是CPU的一部分,主要用于上网时零时暂存的一些东西,它存在于CPU中
CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么的大
缓存是为了解决CPU速度和内存速度的速度差异问题
内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多
这里要特别指出的是:
1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的
3.关于一级缓存和二级缓存
为了分清这两个概念,我们先了解一下RAM
ram和ROM相对的,RAM是掉电以后,其中才信息就消失那一种,ROM在掉电以后信息也不会消失那一种
RAM又分两种,
一种是静态RAM,SRAM;一种是动态RAM,DRAM。前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。
有的菜鸟就说了,为了增加系统的速度,把缓存扩大不就行了吗,扩大的越大,缓存的数据越多,系统不就越快了吗
缓存通常都是静态RAM,速度是非常的快,
但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),
价格高(同容量的静态RAM是动态RAM的四倍),
由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为,
但是为了提高系统的性能和速度,我们必须要扩大缓存,
这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存,
这些高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,
我们把原来的静态ram缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存。
一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。
通常CPU找数据或指令的顺序是:先到一级缓存中找,找不到再到二级缓存中找,如果还找不到就只有到内存中找了
问题四:电脑中的缓冲和缓存是什么意思 我想比较通俗的说法来告诉你缓冲:我想你问的是每次播放歌曲和电影时候的缓冲是什么?对吧?其实你每次不论是看电影,还是听歌,都是把电影和歌曲下载到了你的电脑上再进行 听和看 。像一般的IE浏览器都是下载到这个路径C:\Documents and Settings\用户名(一般都是 “Administrator”)\Local Settings\Temporary Internet Files所以说缓冲其实就是已经下载到你电脑的部分缓存:缓存是一个为了提高数据传输速率的临时存放区域。简单的说就是临时文件交换区。电脑中最大的一个缓存就是内存条;cup中也有缓存,切分等级,作用是为了提高cup与硬盘、内存、键鼠等之间的数据传输;硬盘、显卡也都有缓存我想你差不多明白了吧!
问题五:电脑硬盘缓存是什么 硬盘控制器的内存芯片是64MB缓存Cache memory是硬盘控制器上的一块内存芯片具有极快的存取速度它是硬盘内部存储和外界接口之间的缓冲器。因为硬盘的内部数据传输速度和外界接口传输速度不合缓存在个中起到一个缓冲的感化。缓存的大年夜小与速度是直接关系到硬盘的传输速度的重要身分可以或许大年夜幅度地进步硬盘整体机能。当硬盘存取零碎数据时须要赓续地在硬盘与内存之间交换数据假如有大年夜缓存则可以将那些零碎数据暂存在缓存中减小外体系的负荷也进步了数据的传输速度。 硬盘的缓存重要起三种感化:一是预读取。当硬盘受到CPU指令控制开端读取数据时硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中因为硬盘上数据存储时是比较持续的所以读取射中率较高当须要读取下一个或者几个簇中的数据的时刻硬盘则不须要再次读取数据直接把缓存中的数据传输到内存中就可以了因为缓存的速度远远高于磁头读写的速度所以可以或许达到明显改良机能的目标;二是对写入动作进行缓存。当硬盘接到写入数据的指令之后并不会立时将数据写入到盘片上而是先临时存储在缓存里然后发送一个数据已写入 的旌旗灯号给体系这时体系就会认为数据已经写入并持续履行下面的工作而硬盘则在余暇不进行读取或写入的时刻时再将缓存中的数据写入到盘片上。固然对于写入数据的机能有必定晋升但也弗成避免地带来了安然隐患――假如数据还在缓存里的时刻忽然掉落电那么这些数据就会损掉。对于这个问题硬盘厂商们天然也有解决办法:掉落电时磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域比及下次启动时再将这些数据写入目标地;第三个感化就是临时存储比来拜访过的数据。有时刻某些数据是会经常须要拜访的硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中再次读取时就可以直接从缓存中直接传输。 大年夜容量的缓存固然可以在硬盘进行读写工作状况下让更多的数据存储在缓存中以进步硬盘的拜访速度但并不料味着缓存越大年夜就越出众。缓存的应用存在一个算法的问题即便缓存容量很大年夜而没有一个高效力的算法那将导致应用中缓存数据的射中率偏低无法有效发挥出大年夜容量缓存的优势。算法是懈弛存容量相辅相成大年夜容量的缓存须要更为有效力的算法不然机能会大年夜大年夜扣头从技巧角度上说高容量缓存的算法是直接影响到硬盘机能发挥的重要身分。更大年夜容量缓存是将来硬盘成长的必定趋势。
问题六:电脑CPU的缓存是什么?举例子说明 这是我回答别人问题的答案,和你问题类似,希望有帮助:
同样核心构架 同样缓存 同样核心数量情况下 主频高则处理速度快解释一下:主频表示时钟频率 cpu一般为上升沿或下降沿触发 也就是说高电位变换到地电位时候 会从寄存器进行运位移一位 3.0Ghz就是一秒钟电平变换3G次 用也就是进行3G次寄存器位移,那么一秒钟寄存器位移越多运算就越快但是,核心构架就好像 交通方式 好的核心构架就好像地下隧道 直达目的地 落后的构架就像土路 弯曲泥泞 在土路上开车速度120 也不没有地下隧道骑电瓶车更快到达目的地 所以核心构架很关键还有缓存 一二三级缓存分别存放不同优先等级的指令 缓存越大 一次清空缓存之前进行的运算就越多 越小则需不断清空才可以继续运算 就像瘦子吃多顿搬一顿砖头 壮汉猛吃一顿就搬一吨砖 核心数量就不说了 四个人干活和一个人干活效率不用比较
问题七:电脑介绍里的 几MB缓存是什么意思 有什么用 作为临时存储器,这样cpu再运算的时候会更快,实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的盯大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能
问题八:电脑缓存取决什么配置 缓存是哪里都有的,硬盘 U盘 CPU 内存 显卡 都有,取决于大家
问题九:电脑中的 一级缓存 二级缓存 是属于什么的? 缓存
缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是由于CPU芯片面积和成本的因素来考虑,缓存都很小。
L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32―256KB。
L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,以前家庭用CPU容量最大的是512KB,现在笔记本电脑中也可以达到2M,而服务器和工作站上用CPU的L2伐速缓存更高,可以达到8M以上。
L3 Cache(三级缓存),分为两种,早期的是外置,现在的都是内置的。而它的实际作用即是,L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3缓存在性能方面仍然有显着的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。
其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。
但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。
问题十:电脑硬盘的缓存是干什么的, 可以理解为暂存.因为硬盘的读写速度跟内存的速度不一样。
举个例子,假设有个生产玻璃珠的机器,你去取,它才会吐出来。
那么,你要取1000个,它不可能一下子吐出来,因为你拿不去。现在在它的吐口处放个盒子(能装大于1000颗),那么它一下子吐完,可以闲置下来了。
你可以从盒子里分多次取。
缓存,读写小数据避免反复读写,起到暂时存放数据。
3. 1.16.5服务器优化技术有哪些
服务器优化技术主要有分布式缓存、异步操作、使用集群以及代码。
网站性能优化第一定律:优先考虑使用缓存优化性能。
缓存原理
(1)什么是缓存?(将数据存储在相对较高访问速度的介质中,以供系统处理)
(2)缓存的优点:访问速度快,如果需要计算可以减少计算时间
(3)缓存的本质是一张以键值对存储的内存hash表
(4)主要用来存储:读写比例高,很少变化的数据
(5)网站的访问遵循28定律
合理使用缓存应该注意以下问题
(1)频繁更新的数据(数据还没有读就已经失效,一般要求读写比在2:1以上才有意义)
(2)没有热点数据(无疑浪费资源)
(3)数据不一致与脏读(缓存被加载的过程中可能会产生数据不一致,有效时间过程数据在内存中就会变成脏数据)
(4)缓存的可用性(如果太过依赖缓存,容易产生雪崩。使用缓存热备并不能提高缓存的可用性,使用集群可以提高可用性)
(5)缓存预热(LRU计算时间过长,有的数据需要提前加载)
(6)缓存穿透(解决部分数据无法命中,而加重数据库压力的问题,一般设置空值)分布式缓存架构
(1)JBoss Cache:数据相同
(2)Memcached:数据不同互不通信
(3)Memcached5大优点:协议简单、通用性强(支持各种语言)、Libevent网络通信、内存管理高效、互不通信。