cache用法Word文件下载.docx

上传人:b****3 文档编号:14856829 上传时间:2022-10-25 格式:DOCX 页数:32 大小:37.57KB
下载 相关 举报
cache用法Word文件下载.docx_第1页
第1页 / 共32页
cache用法Word文件下载.docx_第2页
第2页 / 共32页
cache用法Word文件下载.docx_第3页
第3页 / 共32页
cache用法Word文件下载.docx_第4页
第4页 / 共32页
cache用法Word文件下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

cache用法Word文件下载.docx

《cache用法Word文件下载.docx》由会员分享,可在线阅读,更多相关《cache用法Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。

cache用法Word文件下载.docx

由于这种动态页面技术通常需要从数据源获取数据,并经过一些计算逻辑,最终变成一些

HTML代码发给客户端显示。

而这些计算过程显然也是有成本的。

这些处理成本最直接可表现

为影响服务器的响应速度,尤其是当数据的处理过程变得复杂以及访问量变大时,会变得比较明显。

另一方面,有些数据并非时刻在发生变化,如果我们可以将一些变化不频繁的数据的最

终计算结果(包括页面输岀)缓存起来,就可以非常明显地提升程序的性能,缓存的最常见且

最重要的用途就体现在这个方面。

这也是为什么一说到性能优化时,一般都将缓存摆在第一位

的原因。

我今天要说到的ASP.NETCache也是可以实现这种缓存的一种技术。

不过,它还

有其它的一些功能,有些是其它缓存技术所没有的。

在介绍Cache的用法前,我们先来看一下Cache的定义:

(说明:

我忽略了一些意义不大的

成员)I■-'

I:

'

//实现用于Web应用程序的缓存。

无法继承此类。

publicsealedclass

Cache:

IEnumerable

//用于Cache.Insert(...)

项从不过期。

publicstaticreadonly

//用作Cache.Insert(...)

//方法调用中的

方法调用中的absoluteExpiration

DateTimeNoAbsoluteExpiration;

或Cache.Add(...)

slidingExpiration参数,以禁用可调过期。

TimeSpanNoSlidingExpiration;

参数中以指示

//获取或设置指定键处的缓存项。

publicobjectthis

[stringkey]{

get;

set;

}

//将指定项添加到对象,该对象具有依赖项、过期和优先级策略

//以及一个委托(可用于在从Cache移除插入项时通知应用程序)

publicobjectdependencies,

slidingExpiration.

CacheDependency

TimeSpan

Add(stringkey,objectvalue,

DateTimeabsoluteExpiration,

CacheItemPrioritypriority,

CacheltemRemovedCallbackonRemoveCallback);

//从对象检索指定项。

//key:

要检索的缓存项的标识符。

//返回结果:

检索到的缓存项,未找到该键时为null

publicobject

Get(

string

key);

publicvoid

Insert(

string

key,

object

value);

value,

dependencies);

dependencies,

DateTimeabsoluteExpiration,TimeSpan

slidingExpiration);

//摘要:

//向对象中插入对象,后者具有依赖项、过期和优先级策略

//以及一个委托(可用于在从Cache移除插入项时通知应用程序)。

//

//参数:

//用于引用该对象的缓存键。

//value:

//要插入缓存中的对象。

//dependencies:

//该项的文件依赖项或缓存键依赖项。

当任何依赖项更改时,该对象即无效,

//并从缓存中移除。

如果没有依赖项,则此参数包含null。

//absoluteExpiration:

//所插入对象将过期并被从缓存中移除的时间。

//如果使用绝对过期,则slidingExpiration参数必须为

Cache.NoSlidingExpiration。

//slidingExpiration:

//最后一次访问所插入对象时与该对象过期时之间的时间间隔。

如果该值等效于20

分钟,

//则对象在最后一次被访问20分钟之后将过期并被从缓存中移除。

如果使用可

调过期,则

//absoluteExpiration参数必须为

//priority:

//该对象相对于缓存中存储的其他项的成本,由枚举表示。

//该值由缓存在退岀对象时使用;

具有较低成本的对象在具有较高成本的对象之

前被从缓存移除。

//onRemoveCallback:

//在从缓存中移除对象时将调用的委托(如果提供)。

//当从缓存中删除应用程序的对象时,可使用它来通知应用程序。

//异常:

//System.ArgumentException:

//为要添加到Cache中的项设置absoluteExpiration和

slidingExpiration参数。

//System.ArgumentNullException:

//key或value参数为null。

//System.ArgumentOutOfRangeException:

//将slidingExpiration参数设置为小于TimeSpan.Zero或大于一年的等

效值。

Insert(stringkey,objectvalue,

slidingExpiration,

CacheItemRemovedCallbackonRemoveCallback);

//从应用程序的

对象移除指定项。

Remove(stringkey);

//将对象与依赖项策略、到期策略和优先级策略

//以及可用来在从缓存中移除项【之前】通知应用程序的委托一起插入到Cache

对象

中。

//注意:

此方法受以下版本支持:

3.5SP1、3.0SP1、2.0SP1

publicvoidInsert(stringkey,objectvalue,CacheDependency

CacheItemUpdateCallbackonUpdateCallback);

}

ASP.NET为了方便我们访问Cache,在HttpRuntime类中加了一个静态属性Cache,这

样,我们就可以在任意地方使用Cache的功能。

而且,ASP.NET还给它增加了二个快捷方

式”:

Page.Cache,HttpContext.Cache,我们通过这二个对象也可以访问到

HttpRuntime.Cache

HttpContext.Cache

,注意:

这二者是在访冋冋一个对象。

Page.Cache访冋了

,而HttpContext.Cache又直接访问HttpRuntime.Cache

 

通常,我们使用Cache时,一般只有二个操作:

读,写。

要从Cache中获取一个缓存项,我们可以调用Cache.Get(key)方法,要将一个对象放入缓

存,我们可以调用Add,Insert方法。

然而,Add,Insert方法都有许多参数,有时我们

或许只是想简单地放入缓存,一切接受默认值,那么还可以调用它的默认索引器,我们来看

下这个索引器是如何工作的:

[stringkey]

{

get

returnthis

.Get(key);

set

this.Insert(key,value);

可以看到:

读缓存,其实是在调用Get方法,而写缓存则是在调用Insert方法的最简单的那

个重载版本。

注意了:

Add方法也可以将一个对象放入缓存,这个方法有7个参数,而Insert也有一个签

名类似的重载版本,它们有着类似的功能:

将指定项添加到对象,该对象具有依赖项、过

期和优先级策略以及一个委托(可用于在从Cache移除插入项时通知应用程序)。

然而,

它们有一点小的区别:

当要加入的缓存项已经在Cache中存在时,Insert将会覆盖原有的缓

存项目,而Add则不会修改原有缓存项。

也就是说:

如果您希望某个缓存项目一旦放入缓存后,就不要再被修改,那么调用Add确实可

以防止后来的修改操作。

而调用Insert方法,则永远会覆盖已存在项(哪怕以前是调用

Add加入的)。

从另一个角度看,Add的效果更像是staticreadonly的行为,而Insert的效果则像

static的行为。

注意:

我只是说【像】,事实上它们比一般的static成员有着更灵活的用法。

由于缓存项可以让我们随时访问,看起来确实有点static成员的味道,但它们有着更高级的

特性,比如:

缓存过期(绝对过期,滑动过期),缓存依赖(依赖文件,依赖其它缓存项),

移除优先级,缓存移除前后的通知等等。

后面我将会分别介绍这四大类特性。

Cache类有一个很难得的优点,用MSDN上的说话就是:

此类型是线程安全的

为什么这是个难得的优点呢?

因为在.net中,绝大多数类在实现时,都只是保证静态类型的

方法是线程安全,而不考虑

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1