码迷,mamicode.com
首页 > Web开发 > 详细

WebForm.aspx缓存(Cache)

时间:2014-09-21 15:25:30      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:cache

缓存(Cache)
1,如果每次进入页面的时候都查询数据库而生成页面内容的话,如果访问量非常大
则网站性能会非常差,如果只有第一次访问的时候才查询数据库而生成页面内容。以后都直接输出内容。则能提高系统的性能。这样无论有多少人访问都只访问一次数据库。所以数据库的压力不变(即:即便再多人访问页面,也不会对数据库造成压力)

缓存是一中利用空间换取时间的技术,存在与计算机中的很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接冲快速设备中取。比如Cpu的二级缓存,windows文件读取缓存

缓存存在失效的问题。为了保证从缓存中读取数据和慢速设备中数据一致,则需要在慢速设备中数据发生变化的时候,清除缓存中相应的数据。

缓存是改进网站性能的第一手段,就像索引是改进数据库性能的第一个手段一样。asp.net缓存主要分为:页面缓存,数据源缓存,数据缓存这三种主要的类型

//-------------------------------------------------------------------页面缓存

页面缓存:
给页面添加<%@ OutputCache Duration="15" VaryByParam="none"%>标签就可以启用页面缓存,这样整个页面的内容都会被缓存。页面中的Asp.net代码,数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。Duration表示缓存时间,一秒为单位。超过这个事件则缓存失效,再次生成以后会在缓存15秒,以此类推。而
注:如果看缓存的效果的话,可以在Page_Load处设置断点,然后修改数据库数据,启动调试,看你缓存后,你在15秒内你刷新页面,看Page_Load会不会被执行,和你修改数据库数据后,你刷新页面数据会不会更新。答案是:在缓存的15秒内,再次刷新页面Page_Load不会不执行。既然代码都没被执行,所以你修改数据库数据后,刷新页面后的数据也不会更新。所以你15秒前开始缓存,15内,不管多少用户访问,和刷新页面看到的内容都是一样的。

缓存是针对所有这个页面的访问者。这样1个访问者和1万个访问者,一次访问和100w万次访问素对数据库的严厉是一样的

http://locahost:2619/viewNews.aspx?id=1
对于看新闻页面来讲,如果如上设置的话,它缓存的是第一个页面,也就是(即缓存的是http://locahost:2619/viewNews.aspx?id=1),它不会考虑http://locahost:2619/viewNews.aspx?id=1与http://locahost:2619/viewNews.aspx?id=2有什么不同。因为 ?id=2,?id=3只是页面的不同参数而已,为了能让不同的新闻各自缓存,因此可以设置VaryByParam="id",
即:<%@ OutputCache Duration="15" VaryByParam="id"%>表示对于不同的id参数进行单独缓存,如果有多个确定缓存的参数,则将参数名用分号隔开即可。比如:VaryByParam="id,number"。

如果想让任何不同的查询字符串都创建不同的缓存,则设置VaryByParam="*",一般情况下设置"*"就足够。

在WebUserControl中页可以像页面缓存一样设置控件的缓存。

页面缓存的作用:假设我在页面中添加了这么一段代码<%@ OutputCache Duration="15" VaryByParam="none"%>
那么当第一个客户来访问我的页面的时候,我就将整个页面缓存了。那么在15秒之内,所有客户缓存我这个页面的时候都是直接读取我缓存里面的数据(即缓存的页面)它并没有调用我的Page_Load代码。(所以说,这15秒内所有的客户看的内容都是一样的,当过了15后,这个缓存失效了。它又执行一次Page_Load,然后重新开始缓存)

<%@ OutputCache Duration="15" VaryByParam="none"%>中的VaryByParam="none"表示不考虑参数,只要是这个页面我就给你缓存15秒。
<%@ OutputCache Duration="15" VaryByParam="id"%>,表示考虑参数,根据参数的不同id来缓存。即:一个网站(http://locahost:2619/viewNews.aspx)可以很多个页面(http://locahost:2619/viewNews.aspx?id=1) 比如第一个页面的id是1,第二个页面的id是2,那么我就会根据页面id的不同来缓存。即每个页面都有缓存


//-------------------------------------------------------------------数据源缓存

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"></asp:ObjectDataSource> :注:ObjectDataSource是webForm.aspx中的一个控件。在工具箱,数据里可以拖进页面
数据源缓存:
设定ObjectDataSource的CacheDuration(缓存时间:秒),EnableCaching=true。这样每隔CacheDuration指定的时间段才会调用SelectMethod指定的方法来执行数据库的查询。其他时候都是直接返回缓存的数据。
注:CacheDuration的默认值为Infinite 即无限期,可以给它设为你要的缓存时间,例如CacheDuration="15" 即:<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"  CacheDuration="15">

缓存固定的时间适用于首页,文章列表等访问频繁的页面。对于看帖页面则不适合。假设有100万个帖子,如果每个帖子都是固定缓存1个小时的话,假设一个小时之内10万个帖子被看了,那么就要缓存10万个帖子,非常占用内存。因为“百年一年的”的帖子偶然被访问一次也缓存一个小时,非常占用内存。这时候可以采用“滑动窗口”策略,比如:帖子缓存10分钟,如果10分钟之内又访问了,则缓存的失效时间修改为从被访问这一刻起的10分钟之后。以此类推。这样经常访问的忒子就可以“长期缓存”,而不经常访问的帖子也不会因为偶然访问而长期占用缓存。
设置方法,数据源:CacheExpirationPolicy="Sliding"

WebForm.aspx缓存(Cache)

标签:cache

原文地址:http://blog.csdn.net/fanbin168/article/details/39450821

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!