当前位置:首页 » 硬盘大全 » 本站启用缓存技术
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

本站启用缓存技术

发布时间: 2023-07-10 06:46:28

❶ ☆前端优化:浏览器缓存技术介绍

在前端开发中,性能一直都是被大家所重视的一点,然而判断一个网站的性能最直观的就是看网页打开的速度。 其中提高网页反应速度的一个方式就是使用缓存 。缓存技术一直一来在WEB技术体系中扮演非常重要角色,是快速且有效地提升性能的手段。

一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。

所以,缓存技术是无数WEB开发从业人员在工作过程中不可避免的一大问题。 在产品开发的时候我们总是想办法避免缓存产生,而在产品发布之时又在想策略管理缓存提升网页的访问速度 。了解浏览器的缓存命中原理,是开发WEB应用的基础,本文着眼于此,学习浏览器缓存的相关知识,总结缓存避免和缓存管理的方法,结合具体的场景说明缓存的相关问题。希望能对有需要的人有所帮助。

在实际WEB开发过程中,缓存技术会涉及到不同层、不同端,比如:用户层、系统层、代理层、前端、后端、服务端等, 每一层的缓存目标都是一致的,就是尽快返回请求数据、减少延迟 ,但每层使用的技术实现是各有不同,面对不同层、不同端的优劣,选用不同的技术来提升系统响应效率。所以,我们首先看下各层的缓存都有哪些技术,都缓存哪些数据,从整体上,对WEB的缓存技术进行了解,如下图所示:

本篇文章重点讲的就是上面红色框部分缓存内容。

当浏览器请求一个网站的时候,会加载各种各样的资源,比如:HTML文档、图片、CSS和JS等文件。对于一些不经常变的内容,浏览器会将他们保存在本地的文件中,下次访问相同网站的时候,直接加载这些资源,加速访问。

那么如何知晓浏览器是读取了缓存还是直接请求服务器?如下图网站来做个示例:

第一次打开该网站后,如果再次刷新页面。会发现浏览器加载的众多资源中,有一部分size有具体数值,然而还有一部分请求,比如图片、css和js等文件并没有显示文件大小,而是显示了 from dis cache 或者 from memory cache 字样。这就说明了,该资源直接从本地硬盘或者浏览器内存读取,而并没有请求服务器。

浏览器启用缓存至少有两点显而易见的好处: (1)减少页面加载时间;(2)减少服务器负载;

浏览器是否使用缓存、缓存多久,是由服务器控制的 。准确来说,当浏览器请求一个网页(或者其他资源)时, 服务器发回的响应的“响应头”部分的某些字段指明了有关缓存的关键信息 。下面看下,HTTP报文中与缓存相关的首部字段:

根据上面四种类型的首部字段不同使用策略, 浏览器中缓存可分为强缓存和协商缓存

当浏览器对某个资源的请求命中了强缓存时, 返回的HTTP状态为200 ,在chrome的开发者工具的network里面 size会显示为from cache ,比如:京东的首页里就有很多静态资源配置了强缓存,用chrome打开几次,再用f12查看network,可以看到有不少请求就是从缓存中加载的:

Expires是HTTP 1.0提出的一个表示资源过期时间的header,它描述的是一个绝对时间,由服务器返回,用GMT格式的字符串表示 ,如:Expires:Thu, 31 Dec 2037 23:55:55 GMT,包含了Expires头标签的文件,就说明浏览器对于该文件缓存具有非常大的控制权。

例如,一个文件的Expires值是2020年的1月1日,那么就代表,在2020年1月1日之前,浏览器都可以直接使用该文件的本地缓存文件,而不必去服务器再次请求该文件,哪怕服务器文件发生了变化。

所以, Expires是优化中最理想的情况,因为它根本不会产生请求 ,所以后端也就无需考虑查询快慢。它的缓存原理,如下:

Expires是较老的强缓存管理header, 由于它是服务器返回的一个绝对时间 ,在服务器时间与客户端时间相差较大时,缓存管理容易出现问题, 比如:随意修改下客户端时间,就能影响缓存命中的结果 。所以在HTTP 1.1的时候,提出了一个新的header, 就是Cache-Control,这是一个相对时间,在配置缓存的时候,以秒为单位,用数值表示 ,如:Cache-Control:max-age=315360000,它的缓存原理是:

Cache-Control描述的是一个相对时间 ,在进行缓存命中的时候, 都是利用客户端时间进行判断 ,所以相比较Expires,Cache-Control的缓存管理更有效,安全一些。

这两个header可以只启用一个,也可以同时启用, 当response header中,Expires和Cache-Control同时存在时,Cache-Control优先级高于Expires

此外,还可以为 Cache-Control 指定 public 或 private 标记。 如果使用 private,则表示该资源仅仅属于发出请求的最终用户,这将禁止中间服务器(如代理服务器)缓存此类资源 。对于包含用户个人信息的文件(如一个包含用户名的 HTML 文档),可以设置 private,一方面由于这些缓存对其他用户来说没有任何意义,另一方面用户可能不希望相关文件储存在不受信任的服务器上。需要指出的是,private 并不会使得缓存更加安全,它同样会传给中间服务器(如果网站对于传输的安全性要求很高,应该使用传输层安全措施)。 对于 public,则允许所有服务器缓存该资源 。通常情况下,对于所有人都可以访问的资源(例如网站的 logo、图片、脚本等), Cache-Control 默认设为 public 是合理的

当浏览器对某个资源的请求没有命中强缓存, 就会发一个请求到服务器,验证协商缓存是否命中,如果协商缓存命中,请求响应返回的http状态为304并且会显示一个Not Modified的字符串 ,比如你打开京东的首页,按f12打开开发者工具,再按f5刷新页面,查看network,可以看到有不少请求就是命中了协商缓存的:

查看单个请求的Response Header, 也能看到304的状态码和Not Modified的字符串,只要看到这个就可说明这个资源是命中了协商缓存,然后从客户端缓存中加载的 ,而不是服务器最新的资源:

【Last-Modified,If-Modified-Since】的控制缓存的原理,如下

【Last-Modified,If-Modified-Since】都是根据服务器时间返回的header,一般来说, 在没有调整服务器时间和篡改客户端缓存的情况下,这两个header配合起来管理协商缓存是非常可靠的,但是有时候也会服务器上资源其实有变化,但是最后修改时间却没有变化的情况 ,而这种问题又很不容易被定位出来,而当这种情况出现的时候,就会影响协商缓存的可靠性。 所以就有了另外一对header来管理协商缓存,这对header就是【ETag、If-None-Match】 。它们的缓存管理的方式是:

Etag和Last-Modified非常相似,都是用来判断一个参数,从而决定是否启用缓存。 但是ETag相对于Last-Modified也有其优势,可以更加准确的判断文件内容是否被修改 ,从而在实际操作中实用程度也更高。

协商缓存跟强缓存不一样,强缓存不发请求到服务器, 所以有时候资源更新了浏览器还不知道,但是协商缓存会发请求到服务器 ,所以资源是否更新,服务器肯定知道。大部分web服务器都默认开启协商缓存,而且是同时启用【Last-Modified,If-Modified-Since】和【ETag、If-None-Match】,比如apache:

如果没有协商缓存,每个到服务器的请求,就都得返回资源内容,这样服务器的性能会极差。

【Last-Modified,If-Modified-Since】和【ETag、If-None-Match】一般都是同时启用,这是为了处理Last-Modified不可靠的情况。有一种场景需要注意:

比如,京东页面的资源请求,返回的repsonse header就只有Last-Modified,没有ETag:

协商缓存需要配合强缓存使用,上面这个截图中,除了Last-Modified这个header,还有强缓存的相关header, 因为如果不启用强缓存的话,协商缓存根本没有意义

如果资源已经被浏览器缓存下来,在缓存失效之前,再次请求时,默认会先检查是否命中强缓存,如果强缓存命中则直接读取缓存,如果强缓存没有命中则发请求到服务器检查是否命中协商缓存,如果协商缓存命中,则告诉浏览器还是可以从缓存读取,否则才从服务器返回最新的资源。其浏览器判断缓存的详细流程图,如下:

❷ 网站缓存功能什么意思

1.减少 HTTP 请求数:一个页面中包含的图片,JS,CSS等每一个资源都会生成一个 HTTP 下载请求,由浏览器发向网站服务器,如果减少这个请求数,会缩短网络传输的时间。
另外图片尽量采用压缩格式的,例如 jpg 就属于一种压缩图片格式,bmp属于无压缩无失真图片。这个需要网页/网站设计人员综合考虑这个因素。
优点:缩短网络传输事件,网络传输量小,减少服务器端负载;
缺点:减少HTTP请求,有时候无法满足网站发布信息的需求,盗链的出现也会增加HTTP请求;
2、采用缓存技术(webcache):这个是目前网站加速最主要的方式。如果利用代理/缓存加速服务器去实现的话,网站在不需要做任何改动的情况下,就可实现大跨度的实现加速效果。实现的基本方式为:将指定的网站页面周期性的缓存起来,缓存时间可从几秒到几天,在缓存时间内,页面只需要生成一次,以后有用户访问这个页面的时候,网站服务器和数据库就不再需要重新生成相同的页面了,极大的减少了网站服务器和数据库负荷。我们做个简单的对比,假设一个新闻热点页面,在一个小时可被访问1万次,如果这个新闻页面每次被访问的时候,都会通过读取数据库后再一遍一遍的编译生成,在一个小时内将会重复性的生成1万次;如果这个页面被周期性的缓存10分钟,也就是每间隔10分钟才会被生成一次,一个小时内只会被生成6次,如果两种方式一对比,效果就超级明显,两种比较下服务器负荷的压力比差别1000倍以上,缓存技术将使得网站负载在高峰期游刃有余。Fikker网站加速软件实际上是一款代理服务器软件,通过Fikker网站加速服务器提供的页面缓存(webcache)功能,将需要缓存的网站URL配置到页面缓存中(支持正则表达式,通配符和精确地址匹配),并设定一定的缓存时间(几秒到几天),不需要重启Fikker立即生效,如果有重要页面变动,可通过清理缓存将指定的缓存页面清理出去。
优点:网站不需要做任何改动,大幅减少服务器和数据库的负荷。
3、使用gzip压缩:页面压缩主要是降低传输尺寸,提高传输效率。常用的 html,asp,php,jsp,txt,css,js等文本页面,通过gzip压缩可降低75%左右尺寸,也就是原来需要传输 100KB 的页面,gzip压缩后只需要 25KB 的传输数据了,加速的效果是非常明显的。Fikker内置了gzip模块,自动对压缩的文件压面进行压缩传输。
4、使用非阻塞网络技术(non-block):提高网络响应速度,Linux 从 2.6 内核开始,专门引入 epoll 事件机制,相对于传统的 select 事件机制,效率大大的增强,尤其在高并发情况下越发的明显,几个线程即可并发支持上万并发连接,使用尽量少的线程除了减少内存开支还可减少频繁的线程切换的开销。Fikker软件的Linux版本全面支持epoll事件机制,支持从连接建立到连接结束,从域名解析开始到结束的全非阻塞网络设计。
5、提高带宽,加速页面传输:利用带宽加速方式常用是CDN,通过CDN运营商的网络将页面分发出去,用户访问时可就从最近的节点获取,达到加速目的。但这里面有一个前提,就是需要页面是静态的,或动态页面首先需要被生成出来,然后才能利用 CDN 的高速网络传输出去,从这个角度理解,CDN 与 缓存加速具有很强的互补性,即利用缓存技术加快页面生成,利用CDN加快传输,缺一不可。
希望对你有事帮助。

❸ 网站建设中为什么要使用缓存

在网站建设的技术世界中,有一个说法叫“缓存为王”。虽然我们知道调优和扩展是有区别的,而且我们还常说缓存更偏向于一种调优活动,而不是一种扩展活动,但毫无疑问,如果网站建设的整个平台架构上深度应用缓存,会对网站的可扩展性产生极大的影响。通过在各个层面应用缓存,从浏览器到云,到网络,到应用服务器,甚至到数据库,整个网站的可扩展性将大大提高。利用缓存还可以最小化系统的工作量,使用缓存,就可以不必反复查找,创建或提供同一条数据。

但是必须提出一条警告,与其他系统实现和主要修改一样,即使是必须的,添加缓存也会增加网站建设项目的复杂度。多级缓存会使查找产品中的问题变得困难。因此,应该把缓存设计成可监控的。虽然缓存可以带来很大的性能提高,但它本身也需要设计得能够很好扩展才行。如果开发的缓存解决方案不能很好地扩展,就会在系统中造成一个扩展瓶颈,从而导致可用性降低。网站建设中缓存故障会给网站的可用性带来灾难性的打击,因为服务会迅速过载。因此,应该确保缓存设计得具有高可用性且易于维护。最后要说的是,网站建设中的缓存使用是一门艺术,只有具备丰富的经验才能用好它。

❹ 硬盘写入缓存功能如何开启

硬盘写入缓存功能 可以加快硬盘的读写速度,但是如果突然断电,可能造成硬盘中数据不完整,因为有一部分数据在缓存中来不及写入硬盘。具体过程是当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的'时候)时再将缓存中的数据写入到盘片上。默认情况下系统可能并没有开启该功能。

如何开启硬盘写入缓存功能?下面是具体的步骤

1、右键点击桌面计算机(我的电脑,此电脑),选择属性可直接选择设备管理器

2、在设置管理中,找到硬盘单击鼠标右键,点击选择菜单中的"属性"

3、硬盘属性对话框,点击选择"策略"选项卡,将"启用此设备上的写入缓存"的勾选中这样硬盘就开启了写入缓存功能了

如果你的硬盘不是固态硬盘或者你嫌弃硬盘写入速度太慢,就好好应用这个技术吧。

❺ win7系统怎么启用大系统缓存

1、最有效的方法,当然是修改注册表值,启用大系统缓存,具体步骤:先从开始菜单中打开“运行”程序,然后输入regedit命令,确定,进入注册表编辑器。
2、进入编辑器窗口后,先在根键目录中,选择[HKEY_LOCAL_MACHINE]这一项。

3、然后在这一根键中,依次打开[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\MomoryManagement],最后定位于MomoryManagement这一项。

4、在MomoryManagement这一项的右侧窗口,在空白处右键,选择菜单中的“DWORD (32位)值”,新建一个。

5、就会在窗口中新建一个项目,默认名称为“新建 #1”,要将此名改一下,如果此名被确定了,可以右键,选择“重命名”。

6、将名称改为“LargeSystemCache”,空白处点一了下,即可确定,然后就要修改这个值,双击此名称。

❻ 昆明电脑培训分享web服务器缓存基本定义

为了能够给用户一个良好的上网体验,大部分的网页和浏览器都配置了预加载以及缓存功能。今天昆明电脑培训http://www.kmbdqn.com/就通过案例分析来了解一下,关于web缓存的基本定义与类型介绍。



Web缓存是什么?为什么要使用缓存?


Web缓存处于服务器(也称为源服务器)和客户端之间,监视请求并保存响应的副本,比如HTML页面,图片和文件等(统称为表述)。如果之后有对同一个URL的新请求,它会使用自己保存的内容来响应,而不是再次请求源服务器来获取内容。


使用Web缓存主要有下面两个原因:


减少延迟——因为响应请求的内容来自缓存(距客户端较近)而不是源服务器,它会花较少的时间来获得表述并将他们呈现出来。这使得Web看起来具有良好的响应速度。


减少网络传输——由于复用了表述,它可以减少客户端使用的带宽总量。如果客户需要为流量付费,这就意味着省钱。缓存会降低对带宽的要求,也降低处理难度。


Web缓存的种类


浏览器缓存


你在查看现代Web浏览器(比如IE、Safari或Mazilla)选项的时候,可能会看到“缓存”设置。这个选项让你配置一部分硬盘空间来保存你看过的表述。浏览器缓存的规则相当简单。它通常会在一次会话(即当前浏览器中一次调用)中检查表述是否新。


这个缓存在用户使用“回退”按钮或者点击一个浏览过的链接时会特别有用。而且,如果你在网站的各个页面中浏览相同的图片,他们几乎能马上从缓存中加载出来。


代理缓存


Web代理缓存的工作原理相同,但规模更大。代理以同样的方式为成百上千的用户服务;大公司和ISP常常把代码缓存建立在防火墙之上,也可能是以独立设备的形式存在(也称为中间设备)。


代理缓存即不是客户端的一部分,也不是服务器的一部分,而是在网络之外,必须以某种方式把请求路由过去。其中一种方式是手工修改浏览器代理设备,指定要使用的代码;另一种方式是拦截。拦截式代理会根据其自身的基础网络重定向Web请求,不需要在客户端配置,客户端甚至不知道它们的存在。


代理缓存是一种共享缓存,通常不只是一个用户,而是大量用户在使用代理缓存。正因为如此,他们特别擅长降低延迟和网络传输量。这是因为众人都需要的表述会被多次重复使用。


网关缓存


网关缓存又名“反向代理缓存”或“替代缓存”。网关缓存也是一种中介,它他们不是由网络管理员部署以节约带宽,而是由网站管理员自己部署,使其站点更具伸缩性、可靠性以及拥有更好的性能。


很多方法都可以把请求路由到网关缓存,但常见的方法是使用负载均衡器让他们对于客户来说,看起来就跟源服务器一样。


内容分发网络(CDN)在整个Internet(或它的一部分)中分发网关缓存,并将其出售给对此感兴趣的网站。


Web缓存对我有坏处么?我为什么要帮助它们?


Web缓存是互联网中误解深的技术之一。因为代理缓存可以隐藏使用网站的用户,所以网站管理员特别害怕失去对他们的站点的控制,这会使得他们很难去知道是谁在使用他们的站点。


然而不幸的是,即使没有Web缓存,网络上也有非常多的因素可以保证管理员精确的知道一个用户如何使用他们的站点。如果这是你非常关注的问题的话,这篇手册将会指导你如何在站点没有不友好的缓存机制的情况下获取你需要的统计信息。


❼ 如何实现分布式缓存技术

分布式缓存系统是为了解决数据库服务器和web服务器之间的瓶颈。
如果一个网站的流量很大,这个瓶颈将会非常明显,每次数据库查询耗费的时间将会非常可观。
对于更新速度不是很快的网站,可以用静态化来避免过多的数据库查询。
对于更新速度以秒计的网站,静态化也不会太理想,可以用缓存系统来构建。
如果只是单台服务器用作缓存,问题不会太复杂,如果有多台服务器用作缓存,就要考虑缓存服务器的负载均衡。

❽ 常用的缓存技术

第一章 常用的缓存技术
1、常见的两种缓存

本地缓存:不需要序列化,速度快,缓存的数量与大小受限于本机内存
分布式缓存:需要序列化,速度相较于本地缓存较慢,但是理论上缓存的数量与大小无限(因为缓存机器可以不断扩展)
2、本地缓存

Google guava cache:当下最好用的本地缓存
Ehcache:spring默认集成的一个缓存,以spring cache的底层缓存实现类形式去操作缓存的话,非常方便,但是欠缺灵活,如果想要灵活使用,还是要单独使用Ehcache
Oscache:最经典简单的页面缓存
3、分布式缓存

memcached:分布式缓存的标配
Redis:新一代的分布式缓存,有替代memcached的趋势
3.1、memcached

经典的一致性hash算法
基于slab的内存模型有效防止内存碎片的产生(但同时也需要估计好启动参数,否则会浪费很多的内存)
集群中机器之间互不通信(相较于Jboss cache等集群中机器之间的相互通信的缓存,速度更快<--因为少了同步更新缓存的开销,且更适合于大型分布式系统中使用)
使用方便(这一点是相较于Redis在构建客户端的时候而言的,尽管redis的使用也不困难)
很专一(专做缓存,这一点也是相较于Redis而言的)
3.2、Redis

可以存储复杂的数据结构(5种)
strings-->即简单的key-value,就是memcached可以存储的唯一的一种形式,接下来的四种是memcached不能直接存储的四种格式(当然理论上可以先将下面的一些数据结构中的东西封装成对象,然后存入memcached,但是不推荐将大对象存入memcached,因为memcached的单一value的最大存储为1M,可能即使采用了压缩算法也不够,即使够,可能存取的效率也不高,而redis的value最大为1G)
hashs-->看做hashTable
lists-->看做LinkedList
sets-->看做hashSet,事实上底层是一个hashTable
sorted sets-->底层是一个skipList
有两种方式可以对缓存数据进行持久化
RDB
AOF
事件调度
发布订阅等
4、集成缓存

专指spring cache,spring cache自己继承了ehcache作为了缓存的实现类,我们也可以使用guava cache、memcached、redis自己来实现spring cache的底层。当然,spring cache可以根据实现类来将缓存存在本地还是存在远程机器上。

5、页面缓存

在使用jsp的时候,我们会将一些复杂的页面使用Oscache进行页面缓存,使用非常简单,就是几个标签的事儿;但是,现在一般的企业,前台都会使用velocity、freemaker这两种模板引擎,本身速度就已经很快了,页面缓存使用的也就很少了。

总结:

在实际生产中,我们通常会使用guava cache做本地缓存+redis做分布式缓存+spring cache就集成缓存(底层使用redis来实现)的形式
guava cache使用在更快的获取缓存数据,同时缓存的数据量并不大的情况
spring cache集成缓存是为了简单便捷的去使用缓存(以注解的方式即可),使用redis做其实现类是为了可以存更多的数据在机器上
redis缓存单独使用是为了弥补spring cache集成缓存的不灵活
就我个人而言,如果需要使用分布式缓存,那么首先redis是必选的,因为在实际开发中,我们会缓存各种各样的数据类型,在使用了redis的同时,memcached就完全可以舍弃了,但是现在还有很多公司在同时使用memcached和redis两种缓存。