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文件依赖:
4.缓存失效事件处理:
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. |
相关文章推荐
- Asp.Net缓存Cache使用一例
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuilder改造PetShop4 的缓存示例
- Asp.Net缓存Cache使用
- asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuilder改造PetShop4 的缓存示例
- ASP.NET中缓存Cache的使用小节(学习之用)
- CacheDependency、SqlCacheDependency Asp.net 2.0和Sql的缓存管理和使用
- asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据[转]
- 在ASP.NET 2.0中操作数据之五十九:使用SQL缓存依赖项SqlCacheDependency
- Asp.Net Cache缓存使用代码
- ASP.NET Web Api 使用CacheCow和ETag缓存资源(转载)
- ASP.NET Cache缓存的使用
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuilder改造PetShop4 的缓存示例
- asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据
- asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据
- 使用 SqlCacheDependency 类在 ASP.NET 中缓存
- ASP.NET Cache缓存的使用
- asp.net 应用数据缓存 -- Cache对象使用
- Asp.Net Cache缓存使用代码