您的位置:首页 > 编程语言 > ASP

ASP.NET Cache缓存的使用 (转载)

2009-11-24 09:56 465 查看
转载http://www.cnblogs.com/leochu2008/articles/1161772.html

ASP.NETCache是提升系统性能的重要方法,它使用了“最近使用”原则(aleast-recently-usedalgorithm)。在数据库访问中经常会用到Cache保存数据库数据。

1.缓存的添加:

Cache的添加方法有Add()或Insert(),两种方法几乎类似,只是Inser方法可以使用可选参数,即使用默认参数,来实现缓存的添加:

Cache.Add(

KeyName,//缓存名

KeyValue,//要缓存的对象

Dependencies,//依赖项

AbsoluteExpiration,//绝对过期时间

SlidingExpiration,//相对过期时间

Priority,//优先级

CacheItemRemovedCallback);//缓存过期引发事件

2.缓存依赖项:

缓存可以设置的时效性可以通过文件依赖,其他缓存依赖,数据库依赖和过期时间方法来设置,当文件改变,依赖缓存项改变,数据库改变或时间的到期时,缓存会失效,并可以引发一定事件。

2.1文件依赖:

CacheDependencyfileDepends=newCacheDependency(Server.MapPath("Northwind.xml"));
Cache.Insert("GridViewDataSet",dsGrid,fileDepends);
此例为通过Northiwind.xml文件依赖出来缓存的用法:
2.2其他缓存项依赖:
string[]fileDependsArray={Server.MapPath("Northwind.xml")};
string[]cacheDependsArray={"Depend0","Depend1","Depend2"};
CacheDependencycacheDepends=newCacheDependency(fileDependsArray,cacheDependsArray);
Cache.Insert("GridViewDataSet",dsGrid,cacheDepends);
此例设置了Northwind.xml文件依赖和Depend0,depend1,Depend2缓存项
其中Depend0,depend1,Depend2为另外三个缓存。
如果不需要文件依赖可以设置为NULL。
2.3过期时间设定:
AbsoluteExpiration可以设置缓存的绝对过期时间,如:
Cache.Insert("GridViewDataSet",dsGrid,null,DateTime.Now.AddMinutes(30),Cache.NoSlidingExpiration);
缓存会在添加起30分钟后过期。
NoSlidingExpiration可以设置相对过期时间,如果缓存在NoSlidingExpiration设定的时间内没有被访问,缓存过期,如果在这段时间内有访问,则缓存过期时间将会重置为原始值,如NoSlidingExpiration=20
在20分钟内如果没有被访问,缓存过期,如果每次19分钟访问缓存,缓存将永远不会过期。
Cache.Insert("DataGridDataSet",dsGrid,null,Cache.NoAbsoluteExpiration,TimeSpan.FromSeconds(30));
3.优先级:
Priority属性值和意义:

Priorityvalue

Description

NotRemovable

Itemswiththisprioritywillnotbeevicted.

High

Itemswiththisprioritylevelaretheleastlikelytobeevicted.

AboveNormal

ItemswiththisprioritylevelarelesslikelytobeevictedthanitemsassignedNormalpriority.

Default

ThisisequivalenttoNormal.

Normal

Thedefaultvalue.

BelowNormal

ItemswiththisprioritylevelaremorelikelytobeevictedthanitemsassignedNormalpriority.

Low

Itemswiththisprioritylevelarethemostlikelytobeevicted.


4.缓存失效事件处理:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.Caching;//necessaryforCacheDependency
usingSystem.Xml;//necessaryforXmlstuff
publicpartialclass_Default:System.Web.UI.Page
{
publicstaticCacheItemRemovedCallbackonRemove=null;
protectedvoidPage_Load(objectsender,EventArgse)
{
CreateGridView();
}
privatevoidCreateGridView()
{
DataSetdsGrid;
dsGrid=(DataSet)Cache["GridViewDataSet"];
onRemove=newCacheItemRemovedCallback(this.RemovedCallback);
if(dsGrid==null)
{
dsGrid=GetDataSet();
string[]fileDependsArray={Server.MapPath("Northwind.xml")};
string[]cacheDependsArray={"Depend0","Depend1","Depend2"};
CacheDependencycacheDepends=newCacheDependency
(fileDependsArray,cacheDependsArray);
Cache.Insert("GridViewDataSet",dsGrid,cacheDepends,
DateTime.Now.AddSeconds(10),
Cache.NoSlidingExpiration,
CacheItemPriority.Default,
onRemove);
lblMessage.Text="DatafromXMLfile.";
}
else
{
lblMessage.Text="Datafromcache.";
}
gv.DataSource=dsGrid.Tables[0];
gv.DataBind();
}
privateDataSetGetDataSet()
{
DataSetdsData=newDataSet();
XmlDataDocumentdoc=newXmlDataDocument();
doc.DataSet.ReadXml(Server.MapPath("Northwind.xml"));
dsData=doc.DataSet;
returndsData;
}
publicvoidRemovedCallback(stringcacheKey,
ObjectcacheObject,
CacheItemRemovedReasonreasonToRemove)
{
WriteFile("Cacheremovedforfollowingreason:"+
reasonToRemove.ToString());
}
privatevoidWriteFile(stringstrText)
{
System.IO.StreamWriterwriter=newSystem.IO.StreamWriter(
@"C:"test.txt",true);
stringstr;
str=DateTime.Now.ToString()+""+strText;
writer.WriteLine(str);
writer.Close();
}
protectedvoidbtnClear_Click(objectsender,EventArgse)
{
Cache.Remove("GridViewDataSet");
CreateGridView();
}
protectedvoidbtnInit_Click(objectsender,EventArgse)
{
//Initializecachestodependon.
Cache["Depend0"]="Thisisthefirstdependency.";
Cache["Depend1"]="Thisisthe2nddependency.";
Cache["Depend2"]="Thisisthe3rddependency.";
}
protectedvoidbtnKey0_Click(objectsender,EventArgse)
{
Cache["Depend0"]="Thisisachangedfirstdependency.";
}
}

Table17-5.MembersoftheCacheItemRemovedReasonenumeration

Reason

Description

DependencyChanged

Afileoritemkeydependencyhaschanged.

Expired

Thecacheditemhasexpired.

Removed

ThecacheditemhasbeenexplicitlyremovedbytheRemovemethodorreplacedbyanotheritemwiththesamekey.

Underused

Thecacheditemwasremovedtofreeupsystemmemory.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: