缓存的作用是什么?
缓存的作用:
1、预读取
当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候。
硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速率远远高于磁头读写的速率,所以能够达到明显改善性能的目的。
2、写入
当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。
3、临时存储
有时候,某些数据是会经常需要访问的,像硬盘内部的缓存(暂存器的一种)会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。
扩展资料:
缓存分类:
1、静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面,比如:2003年3月22日,管理员通过后台内容管理界面录入一篇文章后,并同步更新相关索引页上的链接。
2、动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了。
-缓存
一、全页面静态化缓存
也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms;
一种比较常用的实现方式是用输出缓存:
Ob_start()要运行的代码$content=Ob_get_contents();将缓存内容写入html文件Ob_end_clean();
二、数据缓存
顾名思义,就是缓存数据的一种方式;比如,商城中的某个商品信息,当用商品id去请求时,就会得出包括店铺信息、商品信息等数据,此时就可以将这些数据缓存到一个php文件中,文件名包含商品id来建一个唯一标示;下一次有人想查看这个商品时,首先就直接调这个文件里面的信息,而不用再去数据库查询;其实缓存文件中缓存的就是一个php数组之类;
Ecmall商城系统里面就用了这种方式;
三、查询缓存
其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示;
按时间变更进行缓存
就是对于缓存文件您需要设一个有效时间,在这个有效时间内,相同的访问才会先取缓存文件的内容,但是超过设定的缓存时间,就需要重新从数据库中获取数据,并生产最新的缓存文件;比如,我将我们商城的首页就是设置2个小时更新一次。
四、页面部分缓存
该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存。
该种方式可以用于如商城中的商品页;
五、Opcode缓存
首先php代码被解析为Tokens,然后再编译为Opcode码,最后执行Opcode码,返回结果;所以,对于相同的php文件,第一次运行时可以缓存其Opcode码,下次再执行这个页面时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了。
比较知名的是XCache、TurckMMCache、PHPAccelerator等。
六、按内容变更进行缓存
这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件;
比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;
当商家在后台修改这个商品的信息时,点击保存,我们同时就更新缓存文件;那么,买家访问这个商品信息时,实际问的是一个静态页面,而不需要再去访问数据库;
试想,如果对商品页不缓存,那么每次访问一个商品就要去数据库查一次,如果有10万人在线浏览商品,那服务器压力就大了;
七、内存式缓存
提到这个,可能大家想到的首先就是Memcached;memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
它就是将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是key_>value方式;
connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache->set('key','缓存的内容');$get=$memcache->get($key);//获取信息>
八、apache缓存模块
apache安装完以后,是不允许被cache的。云南IT培训http://wwwkmbdqncn/认为如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpdconf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。
页面部分缓存是指输出缓存页面的某些部分,而不是缓存整个页面内容。实现页面部分缓存有两种机制:一种是将页面中需要缓存的部分置于用户控件(ascx文件)中,并且为用户控件设置缓存功能(包含用户控件的ASPNET页面可设置也可不设置缓存)。这就是通常所说的“控件缓存”。设置控件缓存的实质是对用户控件进行缓存配置。主要包括以下3种方法:一是使用@ OutputCache指令以声明方式为用户控件设置缓存功能,二是在代码隐藏文件中使用PartialCachingAttribute类设置用户控件缓存;三是使用ControlCachePolicy类以编程方式指定用户控件缓存设置。另外,还有一种称为“缓存后替换”的方法。该方法与控件缓存正好相反,将页面中的某一部分设置为不缓存,因此,尽管缓存了整个页面,但是当再次请求该页时,将重新处理那些没有设置为缓存的内容。
使用@ OutputCache指令
控件缓存与页面输出缓存的@ OutputCache指令既有相似之处,又有不同的方面。二者的共同点在于它们的设置方法基本相同,都是文件顶部设置包含属性的@ OutputCache指令字符串。不同点包括以下两个方面:一是控件缓存的@ OutputCache指令设置在用户控件文件中,而页面输出缓存的@ OutputCache设置在普通ASPNET文件中。二是控件缓存的@ OutputCache指令只能设置6个属性,Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。而在页面输出缓存的@ OutputCache指令字符串中设置的属性多达10个。以上是设置控件缓存时需要注意的问题。下面列举了一些利用@ OutputCache指令设置控件缓存的示例,其中重点说明了VaryByParam和VaryByControl等属性应用。
用户控件中的@ OutputCache指令设置源代码
<%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%>
以上代码设置用户控件缓存有效期时间是120秒,并且允许使用CategoryID和SelectedID参数来改变缓存。通过VaryByParam属性设置,在服务器缓存中可能存储多个用户控件的实例。例如,对于一个包含用户控件的页面,可能存在如下的URL链接。
包含用户控件的页面的URL链接
http://localhost/mypageaspxcategoryid=foo&selectedid=0
http://localhost/mypageaspxcategoryid=foo&selectedid=1
当请求如上URL地址的页面时,由于控件中@ OutputCache指令的设置,尤其是属性VaryByParam的设置,那么在服务器缓存中就会存储两个版本的用户控件缓存实例。
控件缓存设置除了支持以上所述VaryByParam属性外,还支持VaryByControl属性。VaryByParam属性基于使用POST或者GET方式发送的名称/值对来改变缓存,而VaryByControl属性通过用户控件文件中包含的服务器控件来改变缓存。下面是VaryByControl属性的应用示例代码。
用户控件中的@ OutputCache指令设置源代码
<%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="Category" %>
以上代码设置缓存有效期是120秒,并且页面不随任何GET或POST参数改变(即使不使用VaryByParam属性,但是仍然需要在@ OutputControl指令中显式声明该属性)。如果用户控件中包含ID属性为“Category”的服务器控件(例如下拉框控件),那么缓存将根据该控件的变化来存储用户控件数据。
如果读者已经掌握了页面输出缓存的@ OutputCache指令设置方法,那么控件缓存的@ OutputCache指令也会迎刃而解,无非仅使用其中的6个属性而已。然而,可能会产生疑问:如果ASPNET页面和其中包含的用户控件都通过@ OutputCache指令设置了缓存,那么缓存该如何运行呢?
遇到这个问题时,应掌握以下个基本原则:一是ASPNET允许在页面和页面的用户控件中同时使用@ OutputCache指令设置缓存,并且允许设置不同的缓存过期时间值。二是如果页面输出缓存过期时间长于用户控件输出缓存过期时间,则页面的输出缓存持续时间优先。例如,如果页面输出缓存设置为100秒,而用户控件的输出缓存设置为50秒,则包括用户控件在内的整个页将在输出缓存中存储100秒,而与用户控件较短的时间设置无关。三是如果页面输出缓存过期时间比用户控件的输出缓存过期时间短,则即使已为某个请求重新生成该页面的其余部分,也将一直缓存用户控件直到其过期时间到期为止。例如,如果页面输出缓存设置为50秒,而用户控件输出缓存设置为100秒,则页面其余部分每到期两次,用户控件才到期一次。
静态页面的缓存可能有2种形式:其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。
1、静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面,比如:2003年3月22日,管理员通过后台内容管理界面录入一篇文章后,并同步更新相关索引页上的链接。
2、动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了。
静态缓存的缺点:
复杂的触发更新机制:这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较复杂的网站来说,页面之间的逻辑引用关系就成为一个非常非常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首页和相关的3个新闻专题中,在静态缓存模式中,每发一篇新文章,除了这篇新闻内容本身的页面外,还需要系统通过触发器生成多个新的相关静态页面,这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。
旧内容的批量更新: 通过静态缓存发布的内容,对于以前生成的静态页面的内容很难修改,这样用户访问旧页面时,新的模板根本无法生效。
在动态缓存模式中,每个动态页面只需要关心,而相关的其他页面能自动更新,从而大大减少了设计相关页面更新触发器的需要。
软道语录
缓存
是把最常用的东西放在最容易取得的地方。
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 从 26 内核开始,专门引入 epoll 事件机制,相对于传统的 select 事件机制,效率大大的增强,尤其在高并发情况下越发的明显,几个线程即可并发支持上万并发连接,使用尽量少的线程除了减少内存开支还可减少频繁的线程切换的开销。Fikker软件的Linux版本全面支持epoll事件机制,支持从连接建立到连接结束,从域名解析开始到结束的全非阻塞网络设计。
5、提高带宽,加速页面传输:利用带宽加速方式常用是CDN,通过CDN运营商的网络将页面分发出去,用户访问时可就从最近的节点获取,达到加速目的。但这里面有一个前提,就是需要页面是静态的,或动态页面首先需要被生成出来,然后才能利用 CDN 的高速网络传输出去,从这个角度理解,CDN 与 缓存加速具有很强的互补性,即利用缓存技术加快页面生成,利用CDN加快传输,缺一不可。
希望对你有事帮助。
客户端指示
默认情况下,Traffic Server不缓存含有如下请求头部的对象:
Cache-Control: no-store头部
Cache-Control: no-cache头部
配置Traffic Server忽略Cache-Control: no-cache头部,见Configuring Traffic Server to Ignore Client no-cache Headers。
Cookie: 头部(文本对象)
默认情况下,Traffic Server缓存为包含cookies请求服务的响应对象(除了文本对象)。可以配置Traffic
Server不缓存任何类型的cookies内容、缓存所有的cookies内容或者只缓存类型的cookies内容。更多信息见Caching
Cookied Objects。
Authorization: 头部
配置Traffic Server忽略客户端的no-cache头部
默认情况下,Traffic Server严格遵守客户端Cache-Control:
no-cache的指示。如果一个被请求的对象包含no-cache头部,即使它在缓存中仍然有效,Traffic
Server也会将该请求传递给源服务器。可以配置Traffic
Server忽略客户端no-cache指示,这样它将忽略客户端请求的no-cache头部并用缓存中的对象服务该请求。
配置Traffic Server忽略客户端的no-cache头部
1 在文本编辑器中打开位于Traffic Server的config目录下的recordsconfig文件。
2 编辑下面的变量:
变量
描述
proxyconfighttpcacheignore_client_no_cache
设置这个变量为1来忽略客户端请求旁路缓存。
3 保存并关闭recordsconfig文件
4 定位到Traffic Server的bin目录
5 运行traffic_line –x命令来应用配置文件的变更。
源服务器指示
默认情况下,Traffic Server不缓存包含如下响应头部的对象:
Cache-Control: no-store头部
Cache-Control: private头部
WWW-Authenticate: 头部
要配置Traffic Server忽略WWW-Authenticate头部,见Configuring Traffic Server to Ignore WWW-Authenticate Headers。
Set-Cookie: 头部
Cache-Control: no-cache头部
要配置Traffic Server忽略no-cache头部,见Configuring Traffic Server to Ignore Server no-cache Headers。
Expires: 头部包含0值或过去时间
配置Traffic Server忽略服务器no-cache头部
默认情况下,Traffic Server严格遵守Cache-Control:
no-cache指示。一个来自源服务器的带有no-cache头部的响应将不会被存储在缓存,该对象之前在缓存中的拷贝也会被删除。如果配置
Traffic Server忽略no-cache头部,Traffic
Server同时也忽略no-store头部。在大多数情况下是应该遵守no-cache指示的。
配置Traffic Server忽略服务器no-cache头部
1 在文本编辑器中打开位于Traffic Server的config目录下的recordsconfig文件。
2 编辑下面的变量:
变量
描述
proxyconfighttpcacheignore_server_no_cache
设置这个变量为1来忽略服务器旁路缓存。
3 保存并关闭recordsconfig文件
4 定位到Traffic Server的bin目录
5 运行traffic_line –x命令来应用配置文件的变更。
配置Traffic Server忽略WWW-Authenticate头部
默认情况下,Traffic Server不缓存包含WWW-Authenticate响应头部的对象。WWW-Authenticate头部包含着客户端准备用来响应源服务器挑战应答的鉴定参数。
当配置Traffic
Server忽略源服务器的WWW-Authenticate头部,所有带WWW-Authenticate头部的对象将被存储在缓存中被用来服务后来的
请求,在大多数情况下,应该使用默认的不缓存带WWW-Authenticate头部对象的行为。只有在对HTTP
11深入理解的基础上,再尝试配置Traffic Server忽略服务器WWW-Authenticate头部。
配置Traffic Server忽略WWW-Authenticate头部
1 在文本编辑器中打开位于Traffic Server的config目录下的recordsconfig文件。
2 编辑下面的变量:
变量
描述
proxyconfighttpcacheignore_authentication
设置这个变量为1来缓存带WWW-Authenticate头部的对象。
3 保存并关闭recordsconfig文件
4 定位到Traffic Server的bin目录
5 运行traffic_line –x命令来应用配置文件的变更。
配置指示
除了客户端和服务器的指示,Traffic Server同样响应配置选项和文件的指示。
可以按如下步骤来配置Traffic Server:
l 不缓存任何对象(见Disabling HTTP Object Caching)。
缓存动态内容 — 对象的URL以asp结尾或者包含问号()、分号(:)或者cgi。更多信息见Caching Dynamic Content。
缓存响应Cookie: 头部的对象(见Caching Cookied Objects)。
遵守cacheconfig文件中的从不缓存规则(见cacheconfig)。
关闭HTTP 对象缓存功能
默认情况下,Traffic Server缓存除了在cacheconfig文件中设置了从不缓存规则的所有对象。可以关闭HTTP 对象缓存功能,所有的对象都直接由源服务器服务而且从不缓存。
手动配置关闭HTTP对象缓存功能:
1 在文本编辑器中打开位于Traffic Server的config目录下的recordsconfig文件。
2 编辑下面的变量:
变量
描述
proxyconfighttpcachehttp
设置这个变量为0来关闭HTTP对象缓存功能。
3 保存并关闭recordsconfig文件
4 定位到Traffic Server的bin目录
5 运行traffic_line –x命令来应用配置文件的变更。
缓存动态内容
一个以asp结尾或包含问号()、分号(;)或者cgi的URL被认为是动态的。Traffic Server不缓存冬天内容。可以配置Traffic Server缓存动态内容,当然这只推荐在专门的代理情形下使用。
配置Traffic Server缓存动态内容:
1 在文本编辑器中打开位于Traffic Server的config目录下的recordsconfig文件。
2 编辑下面的变量:
变量
描述
proxyconfighttpcache_urls_that_look_dynamic
设置这个变量为1来缓存动态内容。
3 保存并关闭recordsconfig文件
4 定位到Traffic Server的bin目录
5 运行traffic_line –x命令来应用配置文件的变更。
缓存Cookied对象
默认情况下,Traffic Server缓存为包含cookies请求服务的响应对象(除了文本对象)。Traffic
Server之所以不缓存文本内容的cookied,是因为对象的头部和对象是一起存储的,而带有隐私的cookie头部是不能和对象一起保存的。对于非
文本对象,不能确定是否使用了带有隐私的cookie头部。
可以配置Traffic Server:
不缓存任何类型的cookies内容。
只缓存类型的cookies内容。
缓存所有的cookies内容。
配置Traffic Server缓存cookied内容的方式:
1 在文本编辑器中打开位于Traffic Server的config目录下的recordsconfig文件。
2 编辑下面的变量:
变量
描述
proxyconfighttpcachecache_responses_to_cookies
设置这个变量来指定Traffic Server缓存cookied内容的方式:
0 = 不缓存任何cookies响应。
1 = 缓存所有的cookies响应。
2 = 只缓存类型的cookies响应。
3 = 缓存除了文本内容类型的所有cookies响应。
3 保存并关闭recordsconfig文件
4 定位到Traffic Server的bin目录
5 运行traffic_line –x命令来应用配置文件的变更。
结合WordPress的纯静态和动态内容是一种优化网站性能和用户体验的常见方法。通过将一部分页面内容转换为纯静态,可以减轻服务器负载,加快页面加载速度,并提供更好的SEO效果。下面是一种将WordPress纯静态和动态内容结合的简单教程:
步骤一:创建静态HTML页面
使用WordPress建立网站:首先,使用WordPress创建您的网站,并发布所需的内容、页面和文章。
安装静态页面生成插件:在WordPress插件库中搜索并安装适合您需求的静态页面生成插件。一些流行的插件包括"Simply Static"和"WP Static HTML Output"等。
生成静态HTML页面:通过选择合适的选项,使用插件生成静态HTML页面。这些静态页面将保存在您指定的目录中,以后会被访问代替相应的动态WordPress页面。
步骤二:配置服务器
创建子目录:在网站的根目录下,创建一个子目录用于存放静态HTML页面。例如,您可以创建一个名为"static"的子目录。
配置网站服务器:在网站的服务器配置文件(如Apache的htaccess文件或Nginx的配置文件)中,添加重定向规则,将动态WordPress页面请求重定向到对应的静态HTML页面。
步骤三:缓存更新机制
由于静态HTML页面是事先生成的,当您在WordPress中发布新内容或更新页面时,这些更改不会立即反映在静态HTML页面中。因此,您需要考虑实现缓存更新机制,使得在更新内容后,静态HTML页面会被自动重新生成。
一种常见的做法是使用Web钩子(Webhook)或者定时任务,当您发布或更新内容时,自动触发静态页面重新生成过程。
注意事项:
在进行静态和动态内容结合时,需要谨慎处理动态内容的交互功能,如评论、用户登录等,确保这些功能不会受到影响。
使用静态页面生成插件时,请仔细阅读文档和相关指南,确保正确配置和使用插件。
在对服务器进行配置更改时,务必备份服务器配置文件,以防止意外情况发生。
请注意,将WordPress纯静态和动态内容结合是一项高级技术,需要对WordPress、服务器配置和插件的使用有一定的了解。如果您不熟悉相关技术,请谨慎操作,并在必要时寻求专业的技术支持。
0条评论