ASP.NET 数据缓存

第五章 数据缓存

1.页面输出缓存

页面输出缓存作为最简单的缓存形式,将已经生成的动/静态页面全部内容保存在服务器内存中。

设置页面输出缓存可以使用两种方式:

(1)@OutputCache指令

(2)页面输出缓存 API——HttpCachePolicy类

1.1@OutputCache指令

启用页面缓存机制的方法非常简单,只需要在页面的顶部添加一个@OutputCache指令,就可以非常容易的将缓存页面输出。

例如,下面的语句将页面输出以最长60秒时间进行缓存:

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

Duration:缓存的时间

VaryByParam:改变所要缓存输出的形参

@OutputCache指令的常用属性

属性适用对象描述

Duration

页面和用户控件页面或用户控件的缓存时间(单位:秒)
Location页面为存储页面的输出制定一个有效的位置
Shared用户控件一个布尔值,确定用户控件输出是否可以由多个页共享。默认值为false
SqlDependency页面和用户控件表示一个给定SQL Server数据库中某个指定的依赖对象。只要修改该表的内容,就将从缓存中删除页面输出
VaryByControl用户控件个由分号分隔的字符串列表,用于更改用户控件的输出缓存。这些字符串代表用户控件中声明的ASP.NET服务器控件的ID属性值
VaryByCustom页面和用户控件表示自定义输出缓存要求任意文本。如果赋予该属性值为browser,缓存将随浏览器名称和主要版本信息的不用而异
VaryByParam页面和用户控件分号分隔的字符串列表,用于使输出缓存发生

1.2HttpCachePolicy类

下面代码说明了页面缓存API的HttpCachePolicy类的使用方法:

Response.Cache.SetExpires(DataTime.Now.AddSeconds(30));
//相对时间
Response.Cache.SetExpires(DataTime.Parse("19:00:00"));
//绝对时间

2.页面部分缓存

实现页面部分缓存有两种机制:一种是将页面中需要缓存的部分置于用户控件(.ascs 文件)中,并且为用户控件设置缓存功能,这就是“控件缓存”。另一种是将页面中的某一部分设置为不缓存,这就是“缓存后替换”。

2.1控件缓存

利用@OutputCache指令设置控件缓存的常见写法:

<%@OutputCache Duration="60" VaryByParam="Id;CategoryId"%>
<%@OutputCache Duration="60" VaryByParam="none" VaryByControl="ddlGood"%>

2.2缓存后替换


使用Substitution时,首先将整个页面缓存起来,然后将页面中需要动态改变内容的地方用Substitution控件代替即可。Substitution控件需要设置一个重要属性MethodName,该属性用于获取或者设置当Substitution控件执行时为回调而调用的方法名称。该方法必须要符合三点:

(1)该方法必须被定义为静态方法。

(2)该方法必须接受HttpContext类型的参数

(3)该方法必须返回String类型的值



3.应用程序数据缓存

应用程序数据缓存的主要功能是在内存中存储各种与应用程序相关的对象。通常这些对象都需要耗费大量的服务器资源才能创建。因此,对这些对象实施缓存,无论是对服务器还是对用户都有着明显的好处。

3.1Cache类

下面是一个简单的对货品编号值,实现缓存的代码:

Cache["CategotyId"]=Request.QueryString["CategotyId"];
Cache类的主要方法
方法描述
Add将指定项添加到Cache对象,该对象具有依赖项,过期和优先级策略以及一个委托(可用于在从Cache移除插入项时通知应用程序)
Insert向Cache对象插入项。使用此方法的某一版本改写具有相同key参数的现有Cache项
Remove从应用程序的Cache对象移除指定项
添加=》获取=》删除

3.2Add方法

public Object Add(string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback onRemoveCallback)

key:用于引用该项的缓存键。

Value:要添加到缓存的项。

absoluteExpiration:所添加对象将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration参数必须为NoAbsoluteExpiration。

3.3Insert方法

Insert(String,Object)
Insert(String,Object,CacheDependency)
Insert(String,object,CacheDependency,DateTime,TimeSpan)
Insert(String,Object,CacheDependency,DateTime,TimeSpan,CacheItemPriority,CacheItemRemovedCallback)

使用Add方法时必须提供7个参数,而使用Insert方法则可根据需要随意选取重载方式。

下面列举Insert方法的常用示例:

//代码示例将有一分钟绝对过期时间的项添加到缓存中
Cache.Insert("CacheItem6","Cached Item6",null,DateTime.Now.AddMinutes(1d),
System.Web.Caching.Cache.NoSlidingExpiration);

3.4检索应用程序缓存对象

从缓存中检索应用程序数据缓存对象,通常可以使用两种方法。

(1)指定键名。

(2)使用Cache类的Get方法。

4.缓存依赖


4.1CacheDependency类


4.2实现SQL数据缓存依赖

public SqlCacheDependency(SqlCommand sqlcmd);
public SqlCacheDependency(string databaseEntryName,string tableName);

(1)必须定义完全限定的表名,包括表所有者的名称,如dbo.Users。

(2)必须在select语名中显示指定列名。不能使用星号(*)通配符来选择表中的所有列。

(3)不能在查询语句中使用聚合函数。

(4)必须为当前数据库启动SQL Server Service Broker。

启用页面输出缓存,添加@OutputCache指令:

<%@OutputCache Duration="100" SqlDependency="CommandNotification" VaryByParam="none"%>

4.3聚合缓存依赖AggregateCacheDependency类

//自定义文件缓存依赖
CacheDependency dep1=new CacheDependency(fileName);
//创建SQL数据缓存依赖,cmd是一个SqlCommand实例
SqlCacheDependency dep2=new SqlCacheDependency(cmd);
//添加到CacheDeoendency对象组中
CacheDependency[]deps=new CacheDependency[]{dep1,dep2};
//调用Add方法,实现聚合缓存依赖
AggregateCacheDependency aggDep=new AggergateCacheDependency();
aggDep.Add(deps);
//调用Insert方法,添加应用程序缓存对象
Cache.Insert("key",DateTime.Now,aggDep);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值