ASP.NET Cache缓存详解
ASP.NET Cache是提升系统性能的重要方法,它使用了“最近使用”原则(a least-recently-used algorithm)。在数据库访问中经常会用到Cache保存数据库数据。
1.缓存的添加:
Cache的添加方法有Add()或Insert(),两种方法几乎类似,只是Inser方法可以使用可选参数,即使用默认参数,来实现缓存的添加:
Cache.Add(
KeyName,//缓存名
KeyValue,//要缓存的对象
Dependencies,//依赖项
AbsoluteExpiration,//绝对过期时间
SlidingExpiration,//相对过期时间
Priority,//优先级
CacheItemRemovedCallback);//缓存过期引发事件
2. 缓存依赖项:
缓存可以设置的时效性可以通过 文件依赖,其他缓存依赖,数据库依赖和过期时间方法来设置,当文件改变,依赖缓存项改变,数据库改变或时间的到期时,缓存会失效,并可以引发一定事件。
2.1 文件依赖: CacheDependency fileDepends = new CacheDependency(Server.MapPath("Northwind.xml")); Cache.Insert("GridViewDataSet", dsGrid, fileDepends);此例为通过Northiwind.xml文件依赖出来缓存的用法:2.2 其他缓存项依赖:string[] fileDependsArray = {Server.MapPath("Northwind.xml")};string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"};CacheDependency cacheDepends = new CacheDependency(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属性值和意义:
4. 缓存失效事件处理:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Web.Caching; // necessary for CacheDependencyusing System.Xml; // necessary for Xml stuff public partial class _Default : System.Web.UI.Page{ public static CacheItemRemovedCallback onRemove = null; protected void Page_Load(object sender, EventArgs e) { CreateGridView( ); } private void CreateGridView( ) { DataSet dsGrid; dsGrid = (DataSet)Cache["GridViewDataSet"]; onRemove = new CacheItemRemovedCallback(this.RemovedCallback); if (dsGrid == null) { dsGrid = GetDataSet( ); string[] fileDependsArray = {Server.MapPath("Northwind.xml")}; string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"}; CacheDependency cacheDepends = new CacheDependency (fileDependsArray, cacheDependsArray); Cache.Insert("GridViewDataSet", dsGrid, cacheDepends, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, onRemove); lblMessage.Text = "Data from XML file."; } else { lblMessage.Text = "Data from cache."; } gv.DataSource = dsGrid.Tables[0]; gv.DataBind( ); } private DataSet GetDataSet( ) { DataSet dsData = new DataSet( ); XmlDataDocument doc = new XmlDataDocument( ); doc.DataSet.ReadXml(Server.MapPath("Northwind.xml")); dsData = doc.DataSet; return dsData; } public void RemovedCallback(string cacheKey, Object cacheObject, CacheItemRemovedReason reasonToRemove) { WriteFile("Cache removed for following reason: " + reasonToRemove.ToString( )); } private void WriteFile(string strText) { System.IO.StreamWriter writer = new System.IO.StreamWriter( @"C:"test.txt", true); string str; str = DateTime.Now.ToString( ) + " " + strText; writer.WriteLine(str); writer.Close( ); } protected void btnClear_Click(object sender, EventArgs e) { Cache.Remove("GridViewDataSet"); CreateGridView( ); } protected void btnInit_Click(object sender, EventArgs e) { // Initialize caches to depend on. Cache["Depend0"] = "This is the first dependency."; Cache["Depend1"] = "This is the 2nd dependency."; Cache["Depend2"] = "This is the 3rd dependency."; } protected void btnKey0_Click(object sender, EventArgs e) { Cache["Depend0"] = "This is a changed first dependency."; }}
1.缓存的添加:
Cache的添加方法有Add()或Insert(),两种方法几乎类似,只是Inser方法可以使用可选参数,即使用默认参数,来实现缓存的添加:
Cache.Add(
KeyName,//缓存名
KeyValue,//要缓存的对象
Dependencies,//依赖项
AbsoluteExpiration,//绝对过期时间
SlidingExpiration,//相对过期时间
Priority,//优先级
CacheItemRemovedCallback);//缓存过期引发事件
2. 缓存依赖项:
缓存可以设置的时效性可以通过 文件依赖,其他缓存依赖,数据库依赖和过期时间方法来设置,当文件改变,依赖缓存项改变,数据库改变或时间的到期时,缓存会失效,并可以引发一定事件。
2.1 文件依赖: CacheDependency fileDepends = new CacheDependency(Server.MapPath("Northwind.xml")); Cache.Insert("GridViewDataSet", dsGrid, fileDepends);此例为通过Northiwind.xml文件依赖出来缓存的用法:2.2 其他缓存项依赖:string[] fileDependsArray = {Server.MapPath("Northwind.xml")};string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"};CacheDependency cacheDepends = new CacheDependency(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属性值和意义:
| Priority value | Description |
| NotRemovable | Items with this priority will not be evicted. |
| High | Items with this priority level are the least likely to be evicted. |
| AboveNormal | Items with this priority level are less likely to be evicted than items assigned Normal priority. |
| Default | This is equivalent to Normal. |
| Normal | The default value. |
| BelowNormal | Items with this priority level are more likely to be evicted than items assigned Normal priority. |
| Low | Items with this priority level are the most likely to be evicted. |
| Table 17-5. Members of the CacheItemRemovedReason enumeration | |
| Reason | Description |
| DependencyChanged | A file or item key dependency has changed. |
| Expired | The cached item has expired. |
| Removed | The cached item has been explicitly removed by the Remove method or replaced by another item with the same key. |
| Underused | The cached item was removed to free up system memory. |
浙公网安备 33010602011771号