参考的原文地址:
1.http://blog.sina.com.cn/s/blog_805679ae0100sj3d.html
缓存机制详解(截取部分)
一. 为什么要使用缓存
如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差。而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能。这样无论有多少人访问都只访问一次数据库,数据库压力不变。
二. 什么是缓存:
缓存(Cache)是一种用空间换取时间的技术,存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取。比如CPU二级缓存、内存、windows文件读取缓存。缓存是改进网站性能的第一个手段,就像索引是改进数据库性能的第一个手段一样
三. 缓存存在的问题:
缓存存在失效的问题:为了保证从缓存中读取数据和慢速数据(数据库)中数据一致,则需要在慢速数据(数据库)中对应的数据发生变化的时候,清除缓存中相应的数据(缓存依赖)。
四. 下面介绍asp.net中的三种形式的缓存:
页面缓存(中庸)、数据源缓存(最不灵活的)、数据缓存(灵活)这三种主要类型。
1) 页面缓存:
简单的有关介绍:
l 给页面添加<%@ OutputCache Duration=“15” VaryByParam=“none”%>标签就可以启用页面缓存,这样整个页面的内容都会被缓存,页面中的ASP.Net代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。 Duration表示缓存时间,以秒为单位,超过这个时间则缓存失效,再次生成以后会再缓存15秒,以此类推。在Page_Load处设置断点、修改数据库数据测试。这个缓存是在服务器缓存的,不是在客户端,因为用HttpWatch还是能看到向服务器提交的请求的,只不过服务器看到有缓存就没有再执行页面类。一般只有看帖、看新闻、看视频的页面才缓存,CUD的页面没必要缓存。
l 缓存是针对所有这个页面的访问者。这样1个访问者和1万个访问者、一次访问和100万次访问对数据库的压力是一样的。
l 下面开始介绍页面缓存机制:
当浏览器第一次请求页面后,发送了请求报文,服务器端会分析请求的报文,然后判端服务器缓存中有没有该页面的数据的html代码,如果有,发送304告诉浏览器,你那边(浏览器端)有该页面的缓存数据,并发送Last-Modified时间,即告诉浏览器从浏览器那边拿数据就行;如果服务端缓存没有就重新运行页面,创建页面类,读取数据库,返回数据,产生html代码放在服务器缓存区,并设置缓存事件时间为多少,并发送html代码给浏览器。当改浏览器再次发送同一个页面的请求时,会带着上次发来的Last-Modified
时间放在请求报文里,服务器接受到请求报文,分析,一看,这个时间还在设置的缓存时间之内,然后发送304给浏览器,还有Last-Modified时间,告诉浏览器,从自己的缓存区中拿数据html代码。此时,在服务器端没有创建页面类。减少了服务器端的负载。
但是问题来了:那么为什么在服务器端也设置服务器端缓存呢?
这是为了,其他用户的浏览器访问同一个页面时候,服务器要判断服务器端有没有该页面的缓存的html代码,如果有的话,那么就把这个缓存区的html代码发给这个用户的浏览器,
还有一个时间Last-Modified。此时浏览器会在下次再访问该网站页面的时候以If-Modified-Since值的方式提交的服务器。那么服务器就会向上面一样,返回状态码304给服务器。让浏览器从自己的换存中读取数据。他们之间的通信主要通过Last-Modified,和
If-Modified-Since进行判断缓存是否消失。
6282

被折叠的 条评论
为什么被折叠?



