当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > web中缓存的使用

ASP.NET
asp.net css注释的影响
ASP.NET与数据库相关技巧
关于HtmlForm控件
三色交替的下拉列表框
精通ASP.NET中弹出窗口技术
ASP.NET Forums与现有系统整合方案示例
ASP.NET操作IIS中的虚拟目录
DataGrid与SQL Server 2000数据绑定
如何让Web应用程序在Client端实现导出报表功能
如何保证web app中的Send Email线程稳定性
关于用ASP.Net识别远程主机服务器种类
ASP.NET中上传下载文件
提高ASP.NET性能的方法
asp.net StreamReader 创建文件
asp.net如何生成图片验证码(简单)
一个.net 压缩位图至JPEG的代码
简单的SQL Server数据库数据读取与数据操作
获取网站的RSS聚合到自己的网页
.Net程序中整站通用的防SQL注入函数
asp.net生成缩略图及给原始图加水印的函数

ASP.NET 中的 web中缓存的使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 78 ::
收藏到网摘: n/a

很多人都知道什么叫缓存,甚至学习过,但用起来还真难用。我经过几天的学习cache想跟大家分享和讨论。

我是带着疑问去学习的。缓存是用在什么地方,有什么好处。

缓存就是把获取的数据暂时存到缓存中,当获取的数据没有变化时就还是用缓存里的东西。可能有人会问怎么判断获取的数据没有变化?这个等下会说到。这样从缓存数据可是获取数据速度快很多,但要求数据不时时常变化的。像博客园里的博客排行榜,基本没变化,这是虽是数据不怎么变化,但这样页面每个人浏览都是一样的东西,那又何必用缓存干什么呢?直接把此页面生成html,这样打开的速度比用缓存还快。

当一个页面既有公共部分(每个人浏览的都一样)又有个性部分(自己的信息)。比如当当网里就有个购物车当你购完物时,底单上面有推荐买的产品(这也产品可能一天换一次),当然推荐的产品跟你买的产品有关,此时不能生成html了,因为不是每个人浏览此页面都相同,只有当用户买的产品相关到推荐的产品相同时。此时就要用缓存存此推荐产品的数据,当然这个缓存键值是跟买的产品有关,只要买的产品相关得到的推荐产品(这里面有一种关系在里面)才能该缓存的东西。

打个比方:当你买书时就会推荐其他好书给你,此时买书的推荐书都一样,调用的缓存都一样,而买电脑的话可能会推荐你各种好电脑给你,这时调用推荐电脑的缓存。

上面可能讲了下缓存用在什么地方,当然我只知道这种情况,可能还有其他情况,那位知道可评论下。

缓存的好处当然是减轻服务器的负担,加快浏览速度。但如果缓存用得不好,可能得到的数据是过时的,或者反而使浏览熟读更慢。(当你缓存经常变化的数据时)

缓存有分客户端缓存服务器端缓存吗?

两个都有,只是客户端缓存内嵌在浏览器中,基本上是浏览器自动处理缓存。

客户端缓存可以有效地减轻服务器端负载。首先了解一下 HTTP 头:Last-Modified 与 If-Modified-Since。简单的说,Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头实现。

在浏览器可设置浏览器如何使用缓存的。一般默认是自动。操作步骤如下:

工具-》internet选项-》常规-》设置-》检查网页的较新版本中有四个选项来控制缓存的运用

当然代码可控制客户端缓存,比如比想要浏览器缓存东西可用下面代码

html禁用客户端缓存

以下为引用的内容:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1978 08:21:57 GMT">

C#中禁止cache的方法!

以下为引用的内容:
Response.Buffer = true;
Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1);
Response.Expires=0;
Response.CacheControl="no-cache";

我对客户端缓存知道太少,而且我们写程序也很少写客户端缓存, 希望有人提供更多关于客户端缓存的东西。

服务端缓存有System.Web.Caching.cahe和memcached

当然System.Web.Caching.cahe是微软写的类,而memcached是第三方插件。System.Web.Caching.cache目前还不是分布式缓存,只能在一台电脑上(07时候),而

memcached是分布式的高速缓存。

服务器缓存可分为三种缓存

1.输出缓存:

要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。

<%@ OutputCache Duration="60" VaryByParam="*" %>

如同其他页面指令一样,该指令应该出现在 ASPX 页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。

Duration

必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。

Location

指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server 或 ServerAndClient。

VaryByParam

必需属性。Request 中变量的名称,这些变量名应该产生单独的缓存条目。“none” 表示没有变动。“*” 可用于为每个不同的变量数组创建新的缓存条目。变量之间用 “;” 进行分隔。

VaryByHeader

基于指定的标头中的变动改变缓存条目。

VaryByCustom

允许在 global.asax 中指定自定义变动(例如,“Browser”)。

2.片段缓存:

示例

<%@ OutputCache Duration="60" VaryByParam="*" %> 该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。<%@ OutputCache Duration="60" VaryByParam="none"
VaryByControl="CategoryDropDownList" %> 该示例将缓存用户控件60秒,并且将针对CategoryDropDownList控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser"
Shared="true" %>

 

最后,该示例将缓存用户控件60秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件即可)。

3.编程用得最多的缓存:数据缓存

System.Web.Caching.cahe被httpRuntime.Cache或HttpContext.Current.Cache实例化。httpRuntime.Cache,HttpContext.Current.Cache是内置对象就想当与seesion。

HttpContext.Current.Cache与HttpRuntime.Cache区别:

HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象。 HttpRuntime.Cache:获取当前应用程序的Cache。HttpContext.Current.Cache是调用了 HttpRuntime.Cache,且HttpContext.Current.Cache是用在web程序上,而HttpRuntime.Cache是用在任何程序上。System.web命名空间下。

其实HttpContext.Current.Cache是通过 HttpRuntime.Cache来实现的,所以一般实例化最好通过HttpRuntime.Cache来实例化:

例如:System.Web.Caching.Cache cache = HttpRuntime.Cache

System.Web.Caching.Cache有很多方法,但方法中add中是存缓存

参数中有缓存时间,依赖项。

缓存时间即到当缓存的东西达到指定时间就让缓存失效,而依赖项是当依赖项发生变化就会使缓存失效。

依赖项有一般依赖项 CacheDependency和数据库依赖项SqlCacheDependency。

虽然CacheDependency类完成了很重要的功能,但其组成结构却比较简单,主要有两个属性和一个方法。

— 属性“HasChanged”:判断CacheDependency对象是否已更改。

— 属性“UtcLastModified”:返回上次依赖项的修改日期

— 方法“Dispose”:释放CacheDependency对象所占有的资源。因为缓存类继承了接口“IDispose”,所以必须实现此方法。

CacheDependency

例如 Cache.Insert(“key”, myXMLFileData, DateTime.Now.AddMinutes(1),,new

System.Web.Caching.CacheDependency(Server.MapPath(“users.xml”)));

users.xml文件就相当一般依赖项,当xml文件被改了,则此缓存失效。

SqlCacheDependency一般是增对数据库的,这个设置需要在config里设置,而且还要启动数据库的这样服务。

Cache.Insert 中可设置跟数据库中那个表关联,一旦表有变化就会导致cache失效。

可到网上查询如何使用